我正在以编程方式将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