2

Linq データの読み取り専用表示だけが必要です。変更を観察する必要はありません。リンクは次のとおりです。

string ZIPCODEFIELDNAME="zip5";
DataTable DATA = (detailedQueryResult as DataTable);
IEnumerable<object> ZIPCODE_SUMMARY;

ZIPCODE_SUMMARY = from z in DATA.AsEnumerable()
group z by z.Field<string>(ZIPCODEFIELDNAME) into g
let list = g.ToList()
select new
 {
zip = g.Key,
eecount = list.Count(),
 // possible additional aggregate columns here

};

IEnumerable<anonymous object>これを実行するだけで、コード ビハインドでこれを Telerik RadGridView にバインドできます。

myRadGridView.ItemsSource = ZIPCODE_SUMMARY.ToList();

つまり、XAML でバインドを宣言したり、列を定義したりする必要はありません。Visual Studio に同梱されている WPF DataGrid を使用して、それをどのように実現するのでしょうか? 同じアプローチを使用すると、行区切りのみが表示されます。したがって、列を取得する方法ではなく、リスト内の項目については知っています。

膨大な数の CSV ファイルをインポートするための簡単なユーティリティを作成しようとしていますが、同じ構造やフィールド名を持つファイルが 2 つとなく、セットアップ コードの行数が少ないほど優れています。

PS 私は WPF と Linq を始めたばかりなので、 ReplyToNovice=true を設定してください :-)

4

1 に答える 1

1

データグリッドで AutoGenerateColumns=true を設定したことを覚えていますか? はいの場合は、代わりに ICollectionView にバインドしてみてください。

更新:それは奇妙です、以下のコードは私にとってはうまくいきます。ただし、datagrid の datacontext を {Binding} に設定する必要がある場合があります。これにより、オブジェクト全体にバインドされます。

public MainWindow()
{
    InitializeComponent();
    dgZips.ItemsSource = GetFakeZips();
}

public dynamic GetFakeZips()
{
    return Enumerable.Range(1500, 10).Select(i => new { Zip = i, Count = i / 4 });
}

Xaml:

<DataGrid x:Name="dgZips" AutoGenerateColumns="True" />
于 2013-06-03T14:08:43.137 に答える