You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#问题:DataGridView的RowsRemoved事件失效,需实现DEL键删除选中行

问题分析与解决方案

你这里的核心问题是用错了事件:RowsRemoved 事件是在行已经被删除之后触发的通知事件,它不是用来捕获用户按键操作、触发删除逻辑的。要实现按下DEL键删除选中行,你需要监听DataGridView的按键事件,比如KeyDown或者PreviewKeyDown。

下面是修正后的完整实现步骤:

1. 完善删除行的方法(增加安全判断)

先给你的DeleteRow方法加个边界判断,避免没有选中行时抛出异常:

// 删除选中行
private void DeleteRow()
{
    // 先判断是否有可删除的选中行
    if (dataGridView1.CurrentRow == null || dataGridView1.CurrentRow.IsNewRow)
    {
        MessageBox.Show("No valid row selected to remove");
        return;
    }

    try
    {
        dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index);
        MessageBox.Show("Row removed successfully");
    }
    catch (Exception ex)
    {
        MessageBox.Show($"Row remove failed: {ex.Message}");
    }
}

2. 替换为正确的按键事件处理

删除原来的RowsRemoved事件,改用KeyDown事件来捕获DEL键操作:

// 监听DataGridView的按键按下事件
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
    // 判断是否按下了DEL键
    if (e.KeyCode == Keys.Delete)
    {
        // 触发删除逻辑
        DeleteRow();
        // 标记事件已处理,避免系统默认行为干扰
        e.Handled = true;
    }
}

3. 确保事件已正确绑定

别忘了在窗体设计器里把dataGridView1的KeyDown事件绑定到上述处理方法,或者在窗体构造函数里手动绑定:

public YourFormName()
{
    InitializeComponent();
    // 手动绑定事件(如果设计器未自动绑定的话)
    dataGridView1.KeyDown += dataGridView1_KeyDown;
}

补充说明

  • IsNewRow判断是为了避免误删DataGridView底部的空白新增行(默认开启用户新增行功能时会显示这一行)
  • e.Handled = true可以阻止系统对DEL键的默认处理,避免不必要的冲突

内容的提问来源于stack exchange,提问作者Dean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:27:16