我只需要只显示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: - )
答案 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" />