在 DataGridView C# 中删除行

Aan*_*Aan 0 .net c# 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.
    }
}
Run Code Online (Sandbox Code Playgroud)

但我收到了这个错误:

无法删除未提交的新行。

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

Kin*_*ing 6

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

 for(int i = dataGridView1.RowCount-1; i >= 0; i--){
   var row = dataGridView1.Rows[i];
   if (!row.IsNewRow&&!(Convert.ToDateTime(row.Cells[7].Value) - DateTime.Today).Days <= 0){
      dataGridView1.Rows.Remove(row);
   }
 }
Run Code Online (Sandbox Code Playgroud)

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