如何使用 BindingSource 在 DataGridView 中绑定 Navigation 属性(二级属性)?
How to bind a Navigation Property (second level properties) in DataGridView using BindingSource?
我使用了两个实体 类 将值绑定到 DataGridView
。一个是估算和公司。
- 估计有"Id, Estimate Number, Estimate Amount, CompanyId"等列。
- 公司有"Id, Company Name, Address"
等栏目
我创建了两个 BindingSource
,例如 EstimateBindingSource
和 CompanyBindingSource
。
CompanyBindingSource
有 DataSource 作为 EstimateBindingSource
和 DataMember 作为 Estimates
EstimateBindingSource
有 DataSource 作为 Estimates
实体 Class 并且没有定义 DataMember。
我已使用网格 DataSource
将 EstimateBindingSource
绑定到 DataGridView
。
这里,我需要在DataGridView中显示预估数量、预估金额和公司名称。我没能实现这个。
注意: 我没有在逻辑背后做任何代码来做到这一点。只需要使用设计来实现这一点。
在 DataGridView 中显示二级属性的选项
要显示导航 属性 的子 属性,您可以使用以下任一选项:
使用 DataGridViewComboBox
列并将其绑定到 CompanyId
并将其 DataSource
设置为公司列表,并且 DisplayMember
属性到公司的Name
属性和公司的ValueMember
到Id
属性。
覆盖公司Company
class和returnName
的ToString()
方法。然后在网格中显示Company
导航属性。
为您的 Estimate
创建一个 CompanyName
属性,其中 return 是它的 Company.Name
值并显示 CompanyName
在网格中。
使用 DataGridView
的 CellFormatting
事件并将 e.Value
设置为要在单元格中显示的所需值(公司名称)。
使用 Linq
查询或使用 ViewModel
调整您的估算列表并将结果传递到数据网格视图。
为您的 Estimate
类型创建一个 TypeDescriptor
以解析二级属性。
.
要显示公司的 属性 而不是公司 ID,您可以使用 DataGridViewComboBoxColumn
.
使用组合框列
由于您要求一种无需编写代码即可使用设计器的机制,因此我将对此选项进行更多描述。这是您应该执行的设置:
EstimatesBindingSource
应该绑定到 Estimates
的列表
DataGridView
应该绑定到 EstimatesBindingSource
CompanyBindingSource
仅用作组合框列的数据源,应使用 Companies
列表填充
- 要在
Estimates
列表中显示 CompanyName
,使用 DataGridViewComboBoxColumn
并将它的 DataSource
设置为公司列表并设置 DisplayMember
就足够了到 CompanyName
并且它是 Id
的值成员。并将其绑定到 Estimate
. 的 CompanyId
字段
此外,如果您的要求是不显示为 ComboBox
,只需将 DataGridViewComboBoxColumn
的 DisplayStyle
属性 设置为 Nothing
。它删除了下拉样式。
您可能还会发现此 post 有帮助:
我使用了两个实体 类 将值绑定到 DataGridView
。一个是估算和公司。
- 估计有"Id, Estimate Number, Estimate Amount, CompanyId"等列。
- 公司有"Id, Company Name, Address" 等栏目
我创建了两个 BindingSource
,例如 EstimateBindingSource
和 CompanyBindingSource
。
CompanyBindingSource
有 DataSource 作为EstimateBindingSource
和 DataMember 作为Estimates
EstimateBindingSource
有 DataSource 作为Estimates
实体 Class 并且没有定义 DataMember。
我已使用网格 DataSource
将 EstimateBindingSource
绑定到 DataGridView
。
这里,我需要在DataGridView中显示预估数量、预估金额和公司名称。我没能实现这个。
注意: 我没有在逻辑背后做任何代码来做到这一点。只需要使用设计来实现这一点。
在 DataGridView 中显示二级属性的选项
要显示导航 属性 的子 属性,您可以使用以下任一选项:
使用
DataGridViewComboBox
列并将其绑定到CompanyId
并将其DataSource
设置为公司列表,并且DisplayMember
属性到公司的Name
属性和公司的ValueMember
到Id
属性。覆盖公司
Company
class和returnName
的ToString()
方法。然后在网格中显示Company
导航属性。为您的
Estimate
创建一个CompanyName
属性,其中 return 是它的Company.Name
值并显示CompanyName
在网格中。使用
DataGridView
的CellFormatting
事件并将e.Value
设置为要在单元格中显示的所需值(公司名称)。使用
Linq
查询或使用ViewModel
调整您的估算列表并将结果传递到数据网格视图。为您的
Estimate
类型创建一个TypeDescriptor
以解析二级属性。 . 要显示公司的 属性 而不是公司 ID,您可以使用DataGridViewComboBoxColumn
.
使用组合框列
由于您要求一种无需编写代码即可使用设计器的机制,因此我将对此选项进行更多描述。这是您应该执行的设置:
EstimatesBindingSource
应该绑定到Estimates
的列表
DataGridView
应该绑定到EstimatesBindingSource
CompanyBindingSource
仅用作组合框列的数据源,应使用Companies
列表填充
- 要在
Estimates
列表中显示CompanyName
,使用DataGridViewComboBoxColumn
并将它的DataSource
设置为公司列表并设置DisplayMember
就足够了到CompanyName
并且它是Id
的值成员。并将其绑定到Estimate
. 的
CompanyId
字段
此外,如果您的要求是不显示为 ComboBox
,只需将 DataGridViewComboBoxColumn
的 DisplayStyle
属性 设置为 Nothing
。它删除了下拉样式。
您可能还会发现此 post 有帮助: