我只是在寻找使用 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/