【问题标题】:How to display data from related tables in a WPF datagrid如何在 WPF 数据网格中显示相关表中的数据
【发布时间】:2010-08-19 21:29:56
【问题描述】:

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

  • 客户:ID、姓名
  • 产品:ID、名称
  • 订单:id、customerId、productId

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

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

如何在我的 XAML 中指定 DataContext 或 ItemsSource 以显示来自其他表的信息?我正在使用ObjectDataProviders 来提供设计时支持,如果这有什么不同的话。

我见过这个问题: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>

【问题讨论】:

    标签: c# sql-server wpf datagrid


    【解决方案1】:

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

    myDataGrid.ItemsSource = myTable.DefaultView;
    

    只要我想更改我的数据网格显示的内容,我只需更新 ItemsSource。这样我就可以以任何我想要的方式操作我的 DataTable,然后通过 DataGrid 查看结果。

    更新

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

    【讨论】:

    • 我如何得到这个来组合来自多个表的字段?
    • 谢谢 - 那些必须进行连接,然后转换为 DataTable 的额外步骤对我来说并不明显。
    猜你喜欢
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多