DataGridViewComboBoxColumn在单击单击时抛出IndexOutOfRange

时间:2016-06-30 19:27:44

标签: vb.net datagridview datagridcomboboxcolumn

我正在以编程方式将DataGridViewComboBoxColumn添加到DataGridView,但是由于某种原因,它现在总是在我单击单元格或下拉列表时抛出一个Index Out of Range Exception。调试器试图调用外部代码,要求我取消选中我的代码(所以我做了),我仍然看不到发生了什么。我添加列然后设置DataGridView.DataSource - 列数据类型为String;我使用GetGradesList.ToArray()填充组合框 - 项目在那里,绑定似乎工作并正确反映项目。

以下是添加列的片段;

Sub  AddComboBoxColumn(dc As DataColumn )        
        Dim dgvCol As DataGridViewComboBoxColumn = New DataGridViewComboBoxColumn
                dgvCol.DataPropertyName = dc.ColumnName
                dgvCol.Name = dc.ColumnName
                dgvCol.DefaultCellStyle.BackColor = Color.LightGray

                dgvCol.Items.AddRange(GetGradesList.ToArray())
                dgvCol.ReadOnly = False
                dgvCol.HeaderText = dc.ColumnName
                DataGridView1.Columns.Add(dgvCol)

End Sub

当我输入这个时,我尝试删除DataSourceUpdateMode.OnValidation,这解决了这个问题;所以我的问题是为什么会发生这种情况与DataSourceUpdateMode.OnValidation - 我订阅了CellValidating事件并返回,如果有一个RowIndex = -1

任何一个有任何想法我为什么会得到索引超出范围的例外?

编辑6-30-2016 数据源如下所示 - 绑定到dataTable的bindingSource,其中包含来自Database Query的行。

Private Sub LoadRecipes(ByVal recipeID As Integer)

    Dim dt As DataTable = New DataTable
    query = "SELECT * FROM tblBays Where RecipeID = " + "'" + recipeID.ToString() + "'"

    dt = RetrieveData(query) 

    DataGridView1.AutoGenerateColumns = False
    If DataGridView1.Columns.Count < 1 Then
        CreateDataGridColumns(dt)
    End If

    bsBins.RaiseListChangedEvents = False
    bsBins.SuspendBinding()
    bsBins.DataSource = Nothing
    bsBins.DataSource = dt
    bsBins.ResumeBinding()
    DataGridView1.DataSource = Nothing
    DataGridView1.DataSource = bsBins


    bsBins.RaiseListChangedEvents = True
    '   DataGridView1.DataBindings.DefaultDataSourceUpdateMode = DataSourceUpdateMode.OnValidation

End Sub

Picture Screen Shot

0 个答案:

没有答案