数据网格视图 "remove empty rows" - 按钮



总和:

  • Windows 10

  • Visual Studio 2015

  • C#,Win Forms

  • 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];
}

和另一个按钮删除最后一行的数据网格视图:

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

由于(目前)用户将能够自由编辑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);
        }
    }
}


当我按下"第三个按钮"时,一些空的行会被删除,但有趣的是,并不是所有的行都被删除了。我玩了一会儿,注意到我必须多次按下按钮才能清除所有空行。dataGridView的作用如下:

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

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

最后一行为空+按下按钮
->0空行(yay)

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

所以我的按钮似乎将空行的数量减半,我想知道为什么!有什么想法吗?

不能像在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);
       }
  }

我想到了两件事。第一个是:

  1. 您应该检查null和"。为了简化此操作,只需检查行长度是否等于0。有时,用户可能会留下一个既不会被检测为null也不会被长度==0的空白,所以在检查之前,请尝试用程序删除每个条目中的空白
  2. 第二个问题可能是索引顺序。删除行时,索引会上升并保留一行。一种解决方案是从末尾删除行

最新更新