【问题标题】:Remove row from a DataGridView从 DataGridView 中删除行
【发布时间】:2011-02-17 09:18:39
【问题描述】:

我有一个包含 7 个单元格的 DataGridView,在我进入的每个单元格中,如果我按下转义键,当前行将被删除,而我创建的名为 Public Event EscapeOnFirstRowPressed 的事件没有问题,并将控制权带到每个初始状态。

这个过程的总体思路是当所有的单元格都满足时

  • 将数据写入 SQL 表并
  • 删除当前行,以便用户现在可以导入新数据。

由于写入过程正常,我将兴趣转移到删除该行。

我说这个动作需要从RowValidated sub 或CellEnter 调用它(这发生在我离开当前行并进入下一行时)。但是如果我把命令放在任何一个地方

If Not DGV.CurrentCell.EditedFormattedValue = "" Then
            If Not DGV.Rows(RowIndex).IsNewRow Then
                DGV.Rows.RemoveAt(RowIndex)
                DGV.Refresh()
            End If

        ElseIf DGV.CurrentCell.EditedFormattedValue = Nothing Then
            If Not DGV.Rows(RowIndex).IsNewRow Then
                DGV.Rows.RemoveAt(RowIndex)
                DGV.Refresh()
            End If
        End If

我收到以下错误

DGV.Rows.RemoveAt(0) {"Operation cannot be performed in this event handler."} 

我正在尝试此操作的另一个过程。我尝试通过给出以下命令来模拟 KeyPress 操作

Dim myKeyData As System.Windows.Forms.Keys
Dim myMsg As System.Windows.Forms.Message
  myKeyData = Keys.Escape
ProcessCmdKey(myMsg, myKeyData)

但是当指针开始执行与我按 Esc 键时执行的相同指令时,我收到相同的错误。

【问题讨论】:

    标签: .net vb.net datagridview


    【解决方案1】:

    在事件处理程序完成后,您可以在下一个消息循环中执行代码,方法是调用BeginInvoke

    【讨论】:

    • 感谢关注,请说的具体点。我什么时候会这样做?在 CellValidated 结束时?还是在 RowValidated 之后?并且请您帮助我如何使用 BeginInvocke,因为我试图这样做,但我无法取得任何积极的结果。
    • 调用 BeginInvoke 并传递一个删除行的委托。
    • 你是镇上最好的,成功解决了我的问题。我希望有能力给你更多的选票。再次感谢
    猜你喜欢
    • 2016-08-15
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 2022-10-06
    • 2012-12-04
    • 2015-05-04
    • 2016-08-02
    相关资源
    最近更新 更多