错误:将值设置为网格视图时,“无法在此事件处理程序中执行操作”

时间:2011-01-24 11:10:05

标签: vb.net datagridview

我正在尝试将Arraylist中的值添加到网格视图的特定列。 as:

If (Arr_NewContacts.Count > 0) Then
            dgvStayout.Rows.Clear() ' **GETTING ERROR HERE** 
            dgvStayout.Rows.Insert(0, (Arr_NewContacts.Count - 1))
            For i As Integer = 0 To Arr_NewContacts.Count - 1
                dgvStayout.Rows(i).Cells("Name").Value = Arr_NewContacts(i).ToString
                dgvStayout.Rows(i).Cells("CheckIn Date").Value = Date.Today
                dgvStayout.Rows(i).Cells("CheckOut Date").Value = Date.Today
                IsStayGrid_added = True
            Next
End If

DataGrid属性,如AllowUserToAddRows和AllowUserToDeleteRows 已经设置为true:

我在其中一个文本框的丢失焦点事件上使用上面的代码。

由于

1 个答案:

答案 0 :(得分:4)

今天早上我遇到了类似的问题并追查了这个例外的原因。我看了一下DataGridView源代码,发现在Columns and Rows中清除方法代码正在检查名为NoDimensionChangeAllowed的内部属性。如果这是false,则抛出InvalidOperationException,并显示“无法在此事件处理程序中执行操作”消息。

我发现有八个DataGridView事件处理程序,其中此属性受到影响,您无法修改行数或列数:
CellEnter
CellLeave
CellValidated
CellValidating
RowEnter
RowLeave
RowValidated
RowValidating

因此,您需要确保不会在任何这些处理程序中运行此代码块。如果您必须根据其中一个事件运行代码,那么您需要按照此处的建议通过BeginInvoke运行它:Failure to validate, but cannot remove in DataGridView