如何使用 BindingSource 在 DataGridView 中绑定 Navigation 属性(二级属性)?

How to bind a Navigation Property (second level properties) in DataGridView using BindingSource?

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

我创建了两个 BindingSource,例如 EstimateBindingSourceCompanyBindingSource

  1. CompanyBindingSourceDataSource 作为 EstimateBindingSourceDataMember 作为 Estimates
  2. EstimateBindingSourceDataSource 作为 Estimates 实体 Class 并且没有定义 DataMember

我已使用网格 DataSourceEstimateBindingSource 绑定到 DataGridView

这里,我需要在DataGridView中显示预估数量、预估金额和公司名称。我没能实现这个。

注意: 我没有在逻辑背后做任何代码来做到这一点。只需要使用设计来实现这一点。

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

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

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

  2. 覆盖公司Companyclass和returnNameToString()方法。然后在网格中显示Company导航属性。

  3. 为您的 Estimate 创建一个 CompanyName 属性,其中 return 是它的 Company.Name 值并显示 CompanyName在网格中。

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

  5. 使用 Linq 查询或使用 ViewModel 调整您的估算列表并将结果传递到数据网格视图。

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

使用组合框列

由于您要求一种无需编写代码即可使用设计器的机制,因此我将对此选项进行更多描述。这是您应该执行的设置:

  • EstimatesBindingSource 应该绑定到 Estimates
  • 的列表
  • DataGridView 应该绑定到 EstimatesBindingSource
  • CompanyBindingSource 仅用作组合框列的数据源,应使用 Companies
  • 列表填充
  • 要在 Estimates 列表中显示 CompanyName,使用 DataGridViewComboBoxColumn 并将它的 DataSource 设置为公司列表并设置 DisplayMember 就足够了到 CompanyName 并且它是 Id 的值成员。并将其绑定到 Estimate.
  • CompanyId 字段

此外,如果您的要求是不显示为 ComboBox,只需将 DataGridViewComboBoxColumnDisplayStyle 属性 设置为 Nothing。它删除了下拉样式。

您可能还会发现此 post 有帮助: