将 IEnumerable<anonymous object> 绑定到 WPF 中的 DataGrid



我只需要一个只读显示的Linq数据;不需要观察变化。这是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文件,其中没有两个文件具有相同的结构或相同的字段名,并且设置代码行数越少越好。

注:我刚刚进入WPF和Linq,所以请设置ReplyToNovice=true:-)

您是否记得在数据网格上设置AutoGenerateColumns=true ?如果是,请尝试绑定到ICollectionView。

更新:这很奇怪,下面的代码对我来说工作得很好。不过有一件事,你可能必须将数据网格的数据上下文设置为{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" />

最新更新