尝试将 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 时出错?的主要内容,如果未能解决你的问题,请参考以下文章

kendo UI如何将xml数据源绑定到KendoGrid

如何将 DataSource 绑定到 InitialContext 以进行 JUnit 测试? [复制]

如何使用调度程序将 DropDownList 绑定到编辑器模板中的 DataSource?

动态绑定剑道网格数据源绑定到指令

DataSource绑定DataTable.Select()显示system.data.DataRow问题解决的方法

kendo grid data绑定数据