1

powershell コマンドから取得した値を入力するグリッドビューがあります。たとえば、私の powershell コマンドは get-command です。コマンドが値を返すことは知っています。これが私のコードですが、私のグリッドビューにはデータが表示されません。

ArrayList boxesarray = new ArrayList();

foreach (PSObject ps in commandResults)
    boxesarray.Add(ps.Properties["Name"].Value.ToString());

boxes.DataSource = boxesarray;
boxes.DataBind();

最後の 2 行をラベルに置き換えて値を確認できたので、値があることがわかります。

boxlabel.text = boxesarray[4];

私は何かが欠けているに違いない。助けてください。

4

2 に答える 2

1

GridView には、プロパティを持つクラスのコレクションまたは IEnumerable が必要であり、プロパティは列にマップされます。

あなたのような配列には、プロパティを持たない値型のオブジェクト(文字列)があるため、プロパティを列にバインドできません。

ArrayList boxesarray = new ArrayList();

次のような単純なクラスを作成できます。

public class PropertyContainer
{
    public string Value {get;set;}
}
// NOTE: you can override ToString(); to customize String.Format behaviour
// and to show it in the debugger (althought there's other way for this, using
// DebuggerDisplayAttribute)

そして、データグリッドに正しくバインドされるこのクラスの配列を作成して入力します。

foreach (PSObject ps in commandResults)
    boxesarray.Add(
       new PropertyContainer { Value = ps.Properties["Name"].Value.ToString()});

boxes.DataSource = boxesarray;
boxes.DataBind();

その他のオプションは、LINQ を使用して配列をオブジェクトの配列に変換することです。データ グリッド列が自動的に作成されるように設定されている場合は、匿名オブジェクトを使用することもできます。

// anonymous type
var dataForBinding = boxesArray.select(val => new {Value = val});

// array of the class
var dataForBinding = boxesArray.select(val => new PropertyContainer
   { Value = val });

このデータをグリッドビューにバインドすると、完全に機能します。

于 2012-05-14T01:29:11.827 に答える
0

あなたが試すことができます

.DataSource = (from ps in commandResults 
               select { Name:ps.Properties["Name"].Value.ToString() }).ToList();

または

.DataSource = (from name in yourarraylist
               select { Name:name.ToString() }).ToList();
于 2012-05-14T01:28:01.757 に答える