如何在WPF数据网格中显示相关表格中的数据

问题描述:

我只是找到了我的WPF/Datagrid/Linq方式,并试图找出如何在我的数据网格中显示相关表格中的数据。例如,我有3个表:如何在WPF数据网格中显示相关表格中的数据

  • 客户:ID,名称
  • 产品:ID,名称
  • 订单:ID,客户ID,productId参数

,我已经建立了关系在数据库表中。我已经添加了表格作为创建我的包装类的C#数据集。我现在想要将查询绑定到几个不同的WPF数据网格,以获得以下内容:

  • 订单列表|订单Id |产品名称|客户名称|
  • 客户列表|客户名称|订单摘要(例如逗号分隔的字符串列表)|

如何在我的XAML中指定DataContext或ItemsSource以从其他表中显示此信息?我使用ObjectDataProvider s来提供设计时支持,如果这有所帮助。

我看到这个问题:How to bind WPF Datagrid to a joined table它创建一个新的类来显示表的信息。这是我需要做的,而不是指定一个绑定?

编辑:

我已经使用上面的第二种方法取得了一点成功。我不知道我是否可以使用绑定来实现相同的事情,而无需执行明确的select查询来创建新项目。我已经得到了我映射到数据网格查询:

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> 

我通常只设置DataGrid中的ItemSource到后面的代码中的DataTable。如果要在多个DataTable之间更改ItemSource,这比XAML容易。

myDataGrid.ItemsSource = myTable.DefaultView; 

任何时候我想改变我的datagrid显示什么,我只是更新ItemsSource。这样我可以以任何我想要的方式操作我的DataTable,然后通过DataGrid查看结果。

更新

要加入两个表的数据运行LINQ一起创造你在表中所需字段的IEnumberable。然后将您的IEnumerable转换回DataTable进行显示。我使用this method将IEnumerable转换为DataTable。

+0

我如何获得这个结合多个表中的字段? – 2010-08-19 21:47:00

+0

谢谢 - 必须进行连接的额外步骤,然后转换为DataTable对我来说并不明显。 – 2010-08-23 07:41:36