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

标签 c# sql-server wpf datagrid

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

  • 客户:身份证号、姓名
  • 产品:id、名称
  • 订单:id、customerId、productId

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

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

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

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

编辑:

我使用上面的第二种方法取得了一些成功。我想知道我是否可以使用绑定(bind)来实现同样的事情,而无需执行显式 select 查询来创建新项目。我有一个映射到数据网格的查询:

var q = from d in dbMan.dataset.Orders
   select new { 
     id=d.id, 
     productName = d.ProductsRow.name, 
     custName = d.CustomersRow.name };

然后在 XAML 中绑定(bind):

<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>

最佳答案

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

myDataGrid.ItemsSource = myTable.DefaultView;

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

更新

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

关于c# - 如何在 WPF 数据网格中显示相关表中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3526405/

相关文章:

c# - 将 ASP.NET Core 托管为 Windows 服务

c# - 如何将外部 XML 包含到 XML 文件中——两个文件应该是什么样子

sql-server - 同时更新两个不同的数据库

sql-server - 在 SQL Server 中如何处理列名中的空格?

c# - 是否有任何从 IEnumerable 获得的包装对象类? (TreeView 中的 ItemsSource)

.net - 通过添加 View State 功能修改现有的 MVVM 基础架构

c# - 函数求值被禁用,因为之前的函数求值超时

c# - 在运行时在 ServiceStack.OrmLite 中获取类的表名/避免硬编码表名

sql-server - SQL Server 全局唯一标识符

c# - 如何计算立方体中的点是否在WPF 3D中可见