dataGridView“删除空行”-按钮

Avi*_*ail 2 c# datagridview rows winforms visual-studio-2015

总结:

  • Windows 10

  • Visual Studio 2015

  • C#,赢表格

  • dataGridView

->尝试删除按钮单击事件上的空行

(我不知道问题出在哪里,所以我慷慨地从其他按钮添加了代码)


我正在使用一些按钮来添加行:

private void someButton_Click(object sender, EventArgs e)
{
    dataGridView1.Rows.Add(1);
    dataGridView1.Select();
    dataGridView1.CurrentCell = dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[0];
}
Run Code Online (Sandbox Code Playgroud)

另一个按钮删除dataGridView的最后一行:

private void anotherButton_Click(object sender, EventArgs e)
{
    if (dataGridView1.Rows.Count > 0)
    {
        dataGridView1.Rows.Remove(dataGridView1.Rows[dataGridView1.Rows.Count - 1]);
    }
}
Run Code Online (Sandbox Code Playgroud)

由于(目前)用户将能够自由编辑dataGridView中的单元格,因此某些行可能最终为空。为了解决这个问题,我尝试添加第三个按钮以删除空行:

private void thirdButton_Click(object sender, EventArgs e)
{
    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        if (row.Cells[0].Value == null)
        {
            dataGridView1.Rows.RemoveAt(row.Index);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


当我按下“ thirdButton”时,有些空行被有趣地移除了,但并不是全部。我玩了一会儿,发现我不得不多次按下按钮才能擦除所有空行。dataGridView的行为如下:

存在4个空行+按下按钮
->剩下2个空行

2个空行+按下按钮
->剩下1个空行

最后1个空行+按下按钮
-> 0个空行(是的)

(与例如11-> 5-> 2-> 1-> 0相同)

因此,看来我的按钮将空行的数量减半了,我想知道为什么!有任何想法吗?

Lar*_*ech 5

您不能像在ForEach中那样修改集合。尝试反向迭代集合,这样可以保留索引顺序:

for (int i = dataGridView1.Rows.Count - 1; i > -1; i--)
  {
     DataGridViewRow row = dataGridView1.Rows[i];
     if (!row.IsNewRow && row.Cells[0].Value == null)
       {
          dataGridView1.Rows.RemoveAt(i);
       }
  }
Run Code Online (Sandbox Code Playgroud)

  • 我想你的意思是:for(int i = dataGridView1.Rows.Count-1; i> -1; i--) (4认同)