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

DataGridView多行删除异常:转移行至子表后仅最后一行被删除

问题原因

直接遍历dataGridView1.SelectedRows集合并删除行时,这个集合是动态更新的——每删除一行,SelectedRows的元素就会自动减少一个,导致正向遍历过程中跳过部分行,最终只有最后一行被删除。

解决方案

有两种可靠的修复方式:

方法1:先将选中行存入静态集合再删除

把动态的SelectedRows复制到静态列表中,再遍历静态列表执行删除操作,避免原集合变化干扰遍历:

if (dataGridView1.SelectedRows.Count == dataGridView1.Rows.Count)
{
    dataGridView1.Rows.Clear();
}
else
{
    // 先把选中行存入静态列表,隔离动态集合的变化
    List<DataGridViewRow> selectedRows = new List<DataGridViewRow>();
    foreach (DataGridViewRow row in dataGridView1.SelectedRows)
    {
        selectedRows.Add(row);
    }
    // 遍历静态列表删除行
    foreach (DataGridViewRow row in selectedRows)
    {
        dataGridView1.Rows.Remove(row);
    }
}

方法2:倒序遍历选中行

从最后一行开始往前删除,这样删除当前行后,不会影响未遍历的行索引:

if (dataGridView1.SelectedRows.Count == dataGridView1.Rows.Count)
{
    dataGridView1.Rows.Clear();
}
else
{
    // 从最后一个选中行开始倒序遍历
    for (int i = dataGridView1.SelectedRows.Count - 1; i >= 0; i--)
    {
        DataGridViewRow row = dataGridView1.SelectedRows[i];
        dataGridView1.Rows.Remove(row);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:39:27