如何使用BindingSource绑定DataGridView中的导航属性(二级属性)?

时间:2016-04-07 07:50:42

标签: c# winforms entity-framework datagridview bindingsource

我使用了两个实体类将值绑定到DataGridView。一个是估计和公司。

  • 估算中包含 “Id,Estimate Number,Estimate Amount,CompanyId” 等列。
  • 公司的栏目包括 “Id,公司名称,地址”

我创建了两个BindingSource,例如EstimateBindingSourceCompanyBindingSource

  1. CompanyBindingSource DataSource 设为EstimateBindingSource,将 DataMember 设为Estimates
  2. EstimateBindingSource DataSource 作为Estimates实体类,并且未定义 DataMember
  3. 我已使用网格EstimateBindingSourceDataGridView绑定到DataSource

    在这里,我需要在DataGridView中显示估算数量,估算金额和公司名称。我无法实现此目标。

    注意: 我没有做任何逻辑背后的代码来执行此操作。只需使用设计即可实现此目的。

1 个答案:

答案 0 :(得分:2)

在DataGridView中显示二级属性的选项

要显示导航属性的子属性,您可以使用以下任一选项:

  1. 使用DataGridViewComboBox列并将其绑定到CompanyId并将其DataSource设置为公司列表,将DisplayMember属性设置为Name属性公司和公司的ValueMemberId财产。

  2. 覆盖ToString()类的Company方法并返回公司的Name。然后在网格中显示Company导航属性。

  3. CompanyName创建一个Estimate属性,该属性返回其Company.Name值并在网格中显示CompanyName

  4. 使用CellFormatting DataGridView事件并将e.Value设置为您希望在单元格中显示的所需值(公司名称)。

  5. 使用Linq查询对“估算值”列表进行整形,或使用ViewModel并将结果传递给数据网格视图。

  6. TypeDescriptor类型创建Estimate以解析二级属性。 。 要显示公司的财产而不是公司ID,您可以使用DataGridViewComboBoxColumn

  7. 使用ComboBox列

    由于您要求使用设计器而不编写代码的机制,因此我更多地描述了此选项。以下是您应该执行的设置:

    • EstimatesBindingSource应绑定到Estimates
    • 列表
    • DataGridView应绑定到EstimatesBindingSource
    • CompanyBindingSource仅用作组合框列的数据源,应使用Companies
    • 列表填充
    • 要在CompanyName列表中显示Estimates,只需使用DataGridViewComboBoxColumn并将其DataSource设置为公司列表,并将DisplayMember设置为{ {1}}它是CompanyName的值成员。并将其绑定到Id的{​​{1}}字段。

    此外,如果您的要求是不要将其显示为CompanyId,只需将Estimate的{​​{1}}属性设置为ComboBox即可。它删除了下拉样式。

    你也可以发现这篇文章有用: