c# - dataGridView "remove empty rows"- 按钮

标签 c# winforms datagridview visual-studio-2015 rows

总结:

  • Windows 10

  • Visual Studio 2015

  • C#,Win 窗体

  • 数据 GridView

-> 尝试删除按钮点击事件中的空行

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


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

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


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

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

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

最后一个空行 + 按下按钮
-> 0 个空行(耶)

(与例如 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);
       }
  }

关于c# - dataGridView "remove empty rows"- 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37145086/

相关文章:

c# - 是否可以使用数据注释来验证传递给 Controller ​​的 Action 方法的参数?

c# - 检查两个区域是否接触

C# Control.Focus() 和 Control.Select() 有什么区别

c# - 数据网格中的更新值在带有外键的表中给出错误

.net - 当 SelectionMode=FullRowSelect 时,如何突出显示 DataGridView 中的当前单元格

c# - 如何在 RestSharp 中使用 OAuth2

c# - 在 ajax 成功中使用模型数据

c# - 移动(重绘)表单后,按钮上的动画 gif 停止

c# - 将类型描述符添加到所有 List<T> 以实现属性网格扩展的通用实现?

c# - 是否可以使用 SQL 查询搜索 DataGridView 或 DataTable