【问题标题】:Error : "Operation cannot be performed in this event handler" while setting value to grid view错误:将值设置为网格视图时“无法在此事件处理程序中执行操作”
【发布时间】:2011-01-24 11:10:05
【问题描述】:

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

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 :

我在文本框之一的失去焦点事件上使用上面的代码。

谢谢

【问题讨论】:

  • 我看到你的问题从一月份就出现了,你有没有收到过解决方案?因为我面临同样的问题,但我找不到发生了什么。

标签: vb.net datagridview


【解决方案1】:

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

我发现有八个 DataGridView 事件处理程序会影响此属性,并且您无法修改行数或列数:
细胞输入
细胞离开
细胞验证
细胞验证
行输入
行离开
行验证
行验证

因此,您需要确保此代码块没有在任何这些处理程序中运行。如果由于这些事件之一而必须运行代码,则需要按照此处的建议通过 BeginInvoke 运行它:Failure to validate, but cannot remove in DataGridView

【讨论】:

    猜你喜欢
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 2021-06-21
    相关资源
    最近更新 更多