dataGridView"删除空行" - 按钮

时间:2016-05-10 17:21:38

标签: c# winforms datagridview visual-studio-2015 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];
}

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

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);
        }
    }
}

<小时/> 当我按下&#34; thirdButton&#34;一些空行被删除但有趣的不是全部。我玩了一会儿,发现我不得不多次按下按钮以清除所有空行。 dataGridView的行为如下:

存在4个空行+按下按钮
- &GT;剩下2行空行

2个空行+按钮按 - &GT;剩下1行空行

1个最后一个空行+按钮按 - &GT; 0个空行(yay)

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

所以看来我的按钮将空行数减半,我想知道原因! 有什么想法吗?

2 个答案:

答案 0 :(得分:4)

您无法像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 :(得分:1)

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

  1. 你应该检查null和“”。为了简化这一点,只需检查行长度是否等于0.有时,用户可能会留下一个空格,该空格不会被检测为空,也不会长度== 0,因此请在检查前以编程方式删除每个条目的空白
  2. 第二个问题可能是索引顺序。删除行时,索引会引发并留下一行。一种解决方案是从末尾删除行。