我只是找到了WPF / Datagrid / Linq的方法,我试图找出如何在我的数据网格中显示相关表格中的数据。例如,我有3个表:
我在DB表中设置了关系。我已经将表添加为C#DataSet,它创建了我的包装类。我现在想要将查询绑定到几个不同的WPF数据网格以获得以下内容:
如何在XAML中指定DataContext或ItemsSource以显示其他表中的此信息?我正在使用ObjectDataProvider
来提供设计时支持,如果这有任何区别的话。
我见过这个问题:How to bind WPF Datagrid to a joined table创建了一个新类来显示表的信息。这是我需要做的而不是指定绑定吗?
编辑:
我使用上面的第二种方法取得了一些成功。我想知道我是否可以使用绑定来实现相同的功能而无需进行显式select
查询来创建新项目。我有一个映射到datagrid的查询:
var q = from d in dbMan.dataset.Orders
select new {
id=d.id,
productName = d.ProductsRow.name,
custName = d.CustomersRow.name };
然后在XAML中绑定:
<my:DataGrid.Columns>
<my:DataGridTextColumn Header="id" Binding="{Binding id}" />
<my:DataGridTextColumn Header="Product Name" Binding="{Binding productName}" />
<my:DataGridTextColumn Header="Customer Name" Binding="{Binding custName}" />
</my:DataGrid.Columns>
答案 0 :(得分:4)
我通常只是在后面的代码中将DataGrids ItemSource设置为DataTable。如果要在多个DataTable之间更改ItemSource,这比XAML更容易。
myDataGrid.ItemsSource = myTable.DefaultView;
无论何时我想更改我的datagrid显示的内容,我只需更新ItemsSource即可。这样我就可以以任何我想要的方式操纵我的DataTable,然后通过DataGrid查看结果。
<强>更新强>
要从两个表连接数据,请运行Linq连接以在表中创建所需的IEnumberable字段。然后将您的IEnumerable转换回DataTable进行显示。我使用this method将IEnumerable转换为DataTable。