无法在DataGridView中删除未提交的新行

时间:2015-01-12 14:44:16

标签: c# winforms datagridview c#-3.0

我在WinForms中有Gridview,我想删除GridView中的最后一个空行我尝试使用下面的代码,但它显示错误

我的代码:

bool Empty = true;

    for (int i = 0; i < dataGridView1.Rows.Count; i++)
    {
        Empty = true;
        for (int j = 0; j < dataGridView1.Columns.Count; j++)
        {
            if (dataGridView1.Rows[i].Cells[j].Value != null && dataGridView1.Rows[i].Cells[j].Value.ToString() != "")
            {
                Empty = false;
                break;
            }
        }
        if (Empty)
        {
            dataGridView1.Rows.RemoveAt(i);
        }

显示错误:

  

无法删除未提交的新行。

1 个答案:

答案 0 :(得分:0)

您尝试删除行,同时仍然遍历行。这意味着,在某一点之后,我将超过行数。这可能是原因......

尝试将它们放入列表中,然后遍历该列表。你只能删除...

例如:

     List<int> toBeDeleted = new List<int>();


     // always follow conventions...
     bool empty = false;


      // dataGridView1.Rows.Count-1 due to AllowUserToAddRows = True
      for (int i = 0; i < dataGridView1.Rows.Count-1; i++)
        {
            empty = true;
            for (int j = 0; j < dataGridView1.Columns.Count; j++)
            {
                if (dataGridView1.Rows[i].Cells[j].Value != null && dataGridView1.Rows[i].Cells[j].Value.ToString() != "")
                {
                    empty = false;
                    break;
                }
            }
            if (empty)
            {
                toBeDeleted.Add(i);
            }
        }

      foreach(var f in toBeDeleted)
     {
         dataGridView1.Rows.RemoveAt(f);
       }