2

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

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

4

1 回答 1

1

您还记得在数据网格上设置 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 });
}

xml:

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