如何通过选中 C# 中的复选框从 datagridview 中删除多行?

How to delete multiple rows from a datagridview by selecting the checkboxes in C#?

我有 datagridview 和 header 复选框来选中复选框列中行中的所有复选框(所有复选框的列索引为 0) . 我在删除的按钮事件中有以下代码:

for (int i = 0; i < datagridview.Rows.Count; i++) {
            if (Convert.ToBoolean(datagridview.Rows[i].Cells[0].Value) == true) {
                datagridview.Rows.RemoveAt(i);
            }
        }

随着行删除,datagridview.rows.count不断减少,但循环中的I不断增加。因此,它不会删除所有选中的行,而是只删除其中的一些。当我在代码中增加时,它不会使用 datagridview 中的新数据删除行索引为 0、1、2 等的行。

问题在于,通过在删除时不断增加索引,您会跳过列表中的下一项:

0: [X] Item 0
1: [X] Item 1
2: [X] Item 2

on iteration 0 ... we delete Item 0 on index 0 OK

0: [X] Item 1
1: [X] Item 2

on iteration 1 ... we delete Item 2 on index 1 BUT we skipped Item 1 which is now on index 0

因此,您应该以相反的顺序迭代列表,这样当您删除一个项目时,下一个 前一个项目的索引仍然相同:

for (int i = datagridview.Rows.Count; i >= 0 ; i--)
{
    // ....
}

我在得到 Charles 的提示后解决了这个问题,如下所示。谢谢!

 for (int i = 0; i < dgvBaleDisposition.Rows.Count; i++)
            {
                if (Convert.ToBoolean(dgvBaleDisposition.Rows[i]
                                      .Cells[0].Value) == true)
                {
                    dgvBaleDisposition.Rows.RemoveAt(i);
                }

                i = i - 1;
                j = j + 1;

                if (j == countRows)
                {
                    break;
                }
            }