如何使用来自不同表的数据填充datagrid?

时间:2014-07-24 14:08:43

标签: c# wpf datagrid

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

我知道如何获取所有数据。但我不知道如何在同一个数据网格中呈现它(至少不是最佳实践)。我是否必须创建自己的类,其中包含我想要的所有属性然后呈现它们?这是更好的方法吗?它不必是根据MVVM模式。

3 个答案:

答案 0 :(得分:0)

您有两个选择:

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

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

答案 1 :(得分:0)

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

Contract类与外键所在的表“加入”的方法是将类型为Contract的属性添加到表示其他表的类中:

public Contract Contract [ get; set; }

然后在XAML中,您可以像这样引用它:

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

答案 2 :(得分:0)

当您使用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;}

此属性将指向您Contract字段引用的ContractType行。

因此,在DataGridColumn中,您可以提供如下所示的绑定:

{Binding Contract.ContractName}

现在,按照上面的示例,您可以将Client类替换为您使用DataGrid绑定的类,将Contract类替换为您的合同表名称。

如果你对此感到困惑,请告诉我。