c# - DataGridView RowsRemoved事件无法正常工作

时间:2018-03-28 09:55:06

标签: c# datagridview event-handling row

当用户按下键盘上的DEL按钮时,我想从dataGridView1中删除当前选定的行。

到目前为止,这是我的代码

    // Remove selected row
    private void DeleteRow()
    {
        try
        {
            dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index);
            MessageBox.Show("Row removed");
        }
        catch (Exception ex)
        {
            MessageBox.Show("row remove EX");
            return;
        }
    }

    // Event when user presses DEL button on keyboard
    private void dataGridView1_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
    {
        DeleteRow();
    }

应用程序删除了行,但DeleteRow()函数从未执行,因为我从未看到Row removed消息。我错过了什么吗?

编辑:更新了代码

1 个答案:

答案 0 :(得分:0)

从您发布的代码可见,您可以从RowsRemoved事件处理程序调用DeleteRow()。

但是在删除行之前,RowsRemoved不会执行。如果它将执行它将直接再次删除另一行 - 如果有一个或抛出异常。

请尝试:

var sampleDoc = new SrgsDocument(@"en-US-sample.grxml");                        
var g = new Grammar(sampleDoc);
engine.LoadGrammar(g);

尝试通过在DeleteRow()中设置调试断点来了解您编码的内容。目前您的应用程序类似于DeleteRow-> RowRemovedEventHandler-> DeleteRow

所以删除行的代码会被执行两次。