0

名前付きクラスがあります

public class testClass
{
    public testClass(string showCode, string urn)
    {
        ShowCode = showCode;
        URN = urn;
    }

    public string ShowCode { get; set; }
    public string URN { get; set; }
}

ArrayList を作成し、リストに追加して wpf データグリッドにバインドします

ArrayList l = new ArrayList();
l.Add(new testClass("ose11", "7016463"));
this.grdTestData.ItemsSource = l;

これにより、データグリッドに必要なものだけが表示されます。

今、私はデータグリッドのデータを取り戻し、それを繰り返したいと思っています

IEnumerable<testClass> t = this.grdTestData.ItemsSource as IEnumerable<testClass>;

..しかし ' t ' は null です! !! これが問題です !!

これはデータグリッドの定義です:

<DataGrid AutoGenerateColumns="False" HorizontalAlignment="Left" Margin="12,66,0,48" Name="grdTestData" Width="200" CanUserAddRows="True" >
    <DataGrid.Columns>
        <DataGridTextColumn Header="ShowCode" Binding="{Binding ShowCode}" />
        <DataGridTextColumn Header="URN"  Binding="{Binding Path=URN}" />
    </DataGrid.Columns>
</DataGrid>
4

1 に答える 1

1

ItemsSource は null ではありません。単に がArrayList実装されていないIEnumerable<testClass>ため、実行するキャストは を返しますnull。使用する場合

var list = (IEnumerable<testClass>) datagrid.ItemsSource;

このキャストが無効であるというエラーが表示されます。

List<testClass>ソースの代わりにa を使用するArrayListと、キャストは有効になり、null は返されません。

ジェネリック コレクションを使用したくない場合 は、インターフェイスが必要な場合は代わりにArrayListorにキャストします。IEnumerable (non-generic)

于 2011-07-11T09:45:34.757 に答える