我使用了两个实体类将值绑定到DataGridView
。一个是估计和公司。
我创建了两个BindingSource
,例如EstimateBindingSource
和CompanyBindingSource
。
CompanyBindingSource
将 DataSource 设为EstimateBindingSource
,将 DataMember 设为Estimates
EstimateBindingSource
将 DataSource 作为Estimates
实体类,并且未定义 DataMember 。我已使用网格EstimateBindingSource
将DataGridView
绑定到DataSource
。
在这里,我需要在DataGridView中显示估算数量,估算金额和公司名称。我无法实现此目标。
注意: 我没有做任何逻辑背后的代码来执行此操作。只需使用设计即可实现此目的。
答案 0 :(得分:2)
在DataGridView中显示二级属性的选项
要显示导航属性的子属性,您可以使用以下任一选项:
使用DataGridViewComboBox
列并将其绑定到CompanyId
并将其DataSource
设置为公司列表,将DisplayMember
属性设置为Name
属性公司和公司的ValueMember
到Id
财产。
覆盖ToString()
类的Company
方法并返回公司的Name
。然后在网格中显示Company
导航属性。
为CompanyName
创建一个Estimate
属性,该属性返回其Company.Name
值并在网格中显示CompanyName
。
使用CellFormatting
DataGridView
事件并将e.Value
设置为您希望在单元格中显示的所需值(公司名称)。
使用Linq
查询对“估算值”列表进行整形,或使用ViewModel
并将结果传递给数据网格视图。
为TypeDescriptor
类型创建Estimate
以解析二级属性。
。
要显示公司的财产而不是公司ID,您可以使用DataGridViewComboBoxColumn
。
使用ComboBox列
由于您要求使用设计器而不编写代码的机制,因此我更多地描述了此选项。以下是您应该执行的设置:
EstimatesBindingSource
应绑定到Estimates
DataGridView
应绑定到EstimatesBindingSource
CompanyBindingSource
仅用作组合框列的数据源,应使用Companies
CompanyName
列表中显示Estimates
,只需使用DataGridViewComboBoxColumn
并将其DataSource
设置为公司列表,并将DisplayMember
设置为{ {1}}它是CompanyName
的值成员。并将其绑定到Id
的{{1}}字段。此外,如果您的要求是不要将其显示为CompanyId
,只需将Estimate
的{{1}}属性设置为ComboBox
即可。它删除了下拉样式。
你也可以发现这篇文章有用: