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

时间:2010-08-19 21:29:57

标签: c# sql-server wpf datagrid

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

  • 客户:id,name
  • 产品:id,name
  • 订单:id,customerId,productId

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

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

如何在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>

1 个答案:

答案 0 :(得分:4)

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

myDataGrid.ItemsSource = myTable.DefaultView;

无论何时我想更改我的datagrid显示的内容,我只需更新ItemsSource即可。这样我就可以以任何我想要的方式操纵我的DataTable,然后通过DataGrid查看结果。

<强>更新

要从两个表连接数据,请运行Linq连接以在表中创建所需的IEnumberable字段。然后将您的IEnumerable转换回DataTable进行显示。我使用this method将IEnumerable转换为DataTable。