【发布时间】:2011-06-16 20:06:22
【问题描述】:
我有一个绑定到 POCO 的 DataGridView。我的数据绑定工作正常。但是,我添加了一个组合框列,我希望每一行都不同。具体来说,我有一个购买物品的网格,其中一些有尺寸(如成人 XL、成人 L),而其他物品没有尺寸(如汽车磁铁)。
所以本质上我想要更改的是数据网格中组合框列的数据源。可以这样做吗?
我可以挂钩哪些事件以允许我更改每行的某些列的属性?一种可接受的替代方法是在用户单击或使用选项卡进入行时更改属性。那是什么活动?
赛斯
编辑
我需要更多关于这个问题的帮助。在 Triduses 的帮助下,我非常接近,但我需要更多信息。
首先,根据问题,CellFormatting 事件是否真的是更改组合框列的 DataSource 的最佳/唯一事件。我问是因为我正在做一些资源/数据密集型的事情,而不仅仅是格式化单元格。
其次,只需将鼠标悬停在单元格上即可调用单元格格式化事件。我尝试在 if-block 中设置 FormattingApplied 属性,然后在 if-test 中检查它,但这会返回一条奇怪的错误消息。我的理想情况是,我会为每一行应用更改组合框的数据源一次,然后完成。
最后,为了设置组合框列的数据源,我必须能够将 if 块中的 Cell 转换为 DataGridViewComboBoxColumn 类型,以便我可以用行填充它或设置数据源或其他东西。这是我现在拥有的代码。
Private Sub ProductsDataGrid_CellFormatting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles ProductsDataGrid.CellFormatting
If e.ColumnIndex = ProductsDataGrid.Columns("SizeDGColumn").Index Then ' AndAlso Not e.FormattingApplied Then
Dim product As LeagueOrderProductInfo = DirectCast(ProductsDataGrid.Rows(e.RowIndex).DataBoundItem, LeagueOrderProductInfo)
Dim sizes As LeagueOrderProductSizeList = product.ProductSizes
sizes.RemoveSizeFromList(_parentOrderDetail.SizeID)
'WHAT DO I DO HERE TO FILL THE COMBOBOX COLUMN WITH THE sizes collection.
End If
End Sub
请帮忙。我完全被卡住了,这个任务项目应该需要一个小时,而我现在已经 4 个多小时了。顺便说一句,我也愿意通过采取完全不同的方向来解决这个问题(只要我能很快完成。)
赛斯
【问题讨论】:
标签: .net visual-studio winforms visual-studio-2010 datagridview