尝试将 DataSource 重新绑定到 DataGridViewComboBoxCell 时出错?
Posted
技术标签:
【中文标题】尝试将 DataSource 重新绑定到 DataGridViewComboBoxCell 时出错?【英文标题】:Error trying to rebind DataSource to DataGridViewComboBoxCell? 【发布时间】:2010-11-28 15:45:16 【问题描述】:我有一个带有两个 DataGridViewComboBoxColumns 的 DataGridView。我想使用第一列中的选定项目来触发第二列中项目的重新填充,以每行为基础。
这是我到目前为止的代码。 “addlInfoParentCat”标识第一列,currentRow.Cells.Item(1) 是我要重新填充的 DataGridViewComboBoxCell。 ExtEventAdditionalInfoType 是我定义的包含字符串/值对的类型。
Private Sub dgvAdditionalInfo_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvAdditionalInfo.CellValueChanged
Dim currentCell As DataGridViewCell
currentCell = Me.dgvAdditionalInfo.CurrentCell
If Not currentCell Is Nothing Then
If currentCell.OwningColumn.DataPropertyName = "addlInfoParentCat" Then
Dim parentTypeID As Integer = currentCell.Value
Dim currentRow As DataGridViewRow = Me.dgvAdditionalInfo.CurrentRow
Dim subtypeCell As DataGridViewComboBoxCell = currentRow.Cells.Item(1)
Dim theChildren As New List(Of ExtEventAdditionalInfoType)
theChildren = Custom_ExtEventAdditionalInfoType.GetChildrenOfThisParentOrderByTypeName(parentTypeID)
subtypeCell.DataSource = Nothing
subtypeCell.DataSource = theChildren
subtypeCell.DisplayMember = "ExtEventAdditionalInfoTypeDescr"
subtypeCell.ValueMember = "ID_ExtEventAdditionalInfoType"
End If
End If
End Sub
基本上我看到的是绑定在第一次时效果很好。当我在第一列中选择一个项目时,它会在第二列中正确填充这些项目。我可以向 DataGridView 添加行并重复该过程。
当我在第二列已经绑定后尝试更改第一列项目时,问题就出现了。我得到一个无穷无尽的对话框字符串:
System.ArgumentException:DataGridViewComboBoxCell 值无效。
知道为什么会这样吗?提前致谢!
更新 CodeByMoonlight 的建议似乎奏效了。
我在重新绑定之前清除了 DataGridViewComboBoxCell 的值:
....
subtypeCell.DataSource = Nothing
subtypeCell.Value = Nothing 'here's the change
subtypeCell.DataSource = theChildren
....
【问题讨论】:
【参考方案1】:好吧,看起来一旦您重新修改了第一个组合的值,就会使用于填充第二个组合的绑定和数据源失效,从而导致所有错误。
【讨论】:
感谢您的回答 CodeByMoonlight。我怕我跟不上。每次我更改第一列中的选择时,我都会得到一个新的儿童列表,并将第二个组合与这个新列表重新绑定。绑定无效,然后我重置它,不是吗?还是我没有正确地重新绑定? 我认为关键是绑定暂时无效,而不是你然后纠正它。我认为如果您在加载新数据源之前清除第二个组合的值,应该没问题。但是我是从 Opera Mini 发布的,所以我现在无法测试。以上是关于尝试将 DataSource 重新绑定到 DataGridViewComboBoxCell 时出错?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 DataSource 绑定到 InitialContext 以进行 JUnit 测试? [复制]
如何使用调度程序将 DropDownList 绑定到编辑器模板中的 DataSource?