![](/img/trans.png)
[英]How to bind Navigation Property (second level model's two properties) in DataGridView's single column using BindingSource?
[英]How to bind a Navigation Property (second level properties) in DataGridView using BindingSource?
我使用了两个实体类将值绑定到DataGridView
。 一个是估计和公司。
我创建了两个BindingSource
例如EstimateBindingSource
和CompanyBindingSource
。
CompanyBindingSource
将DataSource作为EstimateBindingSource
,将DataMember作为Estimates
EstimateBindingSource
将DataSource作为Estimates
实体类,并且没有定义DataMember 。 我已使用网格DataSource
将EstimateBindingSource
绑定到DataGridView
。
在这里,我需要在DataGridView中显示估计数字,估计金额和公司名称 。我无法实现这一目标。
注意: 我没有做任何逻辑背后的代码来做到这一点。需要只使用设计来实现这一点。
用于在DataGridView中显示第二级属性的选项
要显示导航属性的子属性,可以使用以下任一选项:
使用DataGridViewComboBox
列并将其绑定到CompanyId
并将其DataSource
设置为公司列表,将DisplayMember
属性设置为公司的Name
属性,将ValueMember
设置为公司的Id
属性。
覆盖Company
类的ToString()
方法并返回公司Name
。 然后在网格中显示Company
导航属性。
为Estimate
创建一个CompanyName
属性,该属性返回其Company.Name
值并在网格中显示CompanyName
。
使用DataGridView
CellFormatting
事件并将e.Value
设置为要在单元格中显示的所需值(公司名称)。
使用Linq
查询ViewModel
您的Estimates列表或使用ViewModel
并将结果传递给数据网格视图。
为Estimate
类型创建TypeDescriptor
以解析二级属性。 。 要显示公司的属性而不是公司ID,可以使用DataGridViewComboBoxColumn
。
使用ComboBox列
由于您要求使用设计器而不编写代码的机制,因此我更多地描述了此选项。 以下是您应该执行的设置:
EstimatesBindingSource
应绑定到Estimates
列表 DataGridView
应绑定到EstimatesBindingSource
CompanyBindingSource
仅用作组合框列的数据源,应使用Companies
列表填充 Estimates
列表中显示CompanyName
,只需使用DataGridViewComboBoxColumn
并将其DataSource
设置为公司列表,并将DisplayMember
设置为CompanyName
,将其value值设置为Id
。 并将其绑定到Estimate
CompanyId
字段。 此外,如果您的要求是不将其显示为ComboBox
,只需将DataGridViewComboBoxColumn
DisplayStyle
属性设置为Nothing
。 它删除了下拉样式。
你也可以发现这篇文章有用:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.