将IEnumerable <anonymous object =“”>绑定到WPF中的DataGrid </anonymous>

时间:2013-06-03 13:56:55

标签: wpfdatagrid

我只需要只显示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文件,其中没有两个具有相同的结构或相同的字段名称,并且设置代码的行数越少越好。

P.S。我刚刚进入WPF和Linq,所以请设置ReplyToNovice = true: - )

1 个答案:

答案 0 :(得分: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" />