如何用来自不同表的数据填充数据网格
本文关键字:数据 填充 数据网 网格 何用 | 更新日期: 2023-09-27 18:14:41
我有一个表,其中一列是合同类型,它用整数表示,这是另一个表中的PK,其中有合同名称和信息。
我知道如何得到所有的数据。但是我不知道如何在相同的数据网格中表示它(至少不是最佳实践)。我是否需要创建自己的类来保存我想要的所有属性,然后再呈现它们?有更好的方法吗?不需要按照MVVM模式
你有两个选择:
-
将查询结果手动加载到表示视图的类中,在循环中逐列赋值
-
在数据库中创建与网格视图匹配的视图,然后加载数据将容易得多。
在WPF中,总是最好以正确的结构提供数据。自定义类不匹配数据库表,因为它们通常是规范化的,我们在WPF中不需要。在您的示例中,您应该声明一个Contract
类,它将Contract
表中的所有列名作为属性。当然,外键Id
属性也在那个表中?
将Contract
类与外键所在的表"连接"的方法是将Contract
类型的属性添加到代表其他表的类中:
public Contract Contract [ get; set; }
在XAML中,你可以这样引用它例如:
<TextBlock Text="{Binding YourOtherObject.Contract.Name}" ... />
当您使用EF 4.0时,那么您不应该将DataGridColumn
与contract-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
类替换为您的合同表名称。