删除DataGridView C#中的行

时间:2013-11-16 04:55:44

标签: c# .net vb.net datagridview row

我尝试遍历dataGridView1并删除不符合以下条件的行:

foreach (DataGridViewRow row in dataGridView1.Rows)
{
    if (!(Convert.ToDateTime(row.Cells[7].Value) - DateTime.Today).Days <= 0)
    {
        dataGridView1.Rows.Remove(row); //error: Uncommitted new row cannot be deleted.
    }
}

但我收到了这个错误:

  

无法删除未提交的新行。

如果代码也是VB.NET,我可以管理。

3 个答案:

答案 0 :(得分:3)

在这种情况下不要使用foreach,循环集合可能会被修改并导致不可预测的结果,有时会抛出异常,例如集合被修改(主要在LINQ中遇到),使用{{1而是:

for

请注意,我们必须从最大的索引循环到0。

答案 1 :(得分:1)

尝试

foreach (DataGridViewRow row in dataGridView1.Rows)
{
 if (!(row.Cells.OfType<DataGridViewCell>().All(c=>c.Value == null))
  {
   if (!(Convert.ToDateTime(row.Cells[7].Value) - DateTime.Today).Days <= 0)
   {
     dataGridView1.Rows.Remove(row);
   }
  }
}

答案 2 :(得分:0)

尝试以下条件:

foreach(DataGridViewRow row in dataGridView1.Rows)
                {

                  if(!row.IsNewRow)
                  {
                     if (!(Convert.ToDateTime(row.Cells[7].Value) - DateTime.Today).Days <= 0)
                     {
                       dataGridView1.Rows.Remove(row);
                     }
                  }

                }