如何用来自不同表的数据填充数据网格

本文关键字:数据 填充 数据网 网格 何用 | 更新日期: 2023-09-27 18:14:41

我有一个表,其中一列是合同类型,它用整数表示,这是另一个表中的PK,其中有合同名称和信息。

我知道如何得到所有的数据。但是我不知道如何在相同的数据网格中表示它(至少不是最佳实践)。我是否需要创建自己的类来保存我想要的所有属性,然后再呈现它们?有更好的方法吗?不需要按照MVVM模式

如何用来自不同表的数据填充数据网格

你有两个选择:

  1. 将查询结果手动加载到表示视图的类中,在循环中逐列赋值

  2. 在数据库中创建与网格视图匹配的视图,然后加载数据将容易得多。

在WPF中,总是最好以正确的结构提供数据。自定义类不匹配数据库表,因为它们通常是规范化的,我们在WPF中不需要。在您的示例中,您应该声明一个Contract类,它将Contract表中的所有列名作为属性。当然,外键Id属性也在那个表中?

Contract类与外键所在的表"连接"的方法是将Contract类型的属性添加到代表其他表的类中:

public Contract Contract [ get; set; }

在XAML中,你可以这样引用它例如:

<TextBlock Text="{Binding YourOtherObject.Contract.Name}" ... />

当您使用EF 4.0时,那么您不应该将DataGridColumncontract-type字段绑定,而应该将其与Contract.ContractName绑定

让我们用一个例子来理解:假设您有以下两个表

Contract { ContractID, ContractName, ContractInfo }
Client {ClientID, ClientName, ContractType} where ContractType is foreign key from Contract.ContractID

现在在EF中,您将有Client类,其中您将有一个属性Contract,类型为Contract,如下所示

public Contract Contract {get; set;}

这个属性将指向ContractType字段所引用的Contract行。

所以在DataGridColumn中你可以像下面这样提供绑定:

{Binding Contract.ContractName}

现在,根据上面的例子,您可以将Client类替换为您与DataGrid绑定的类,并将Contract类替换为您的合同表名称。