我尝试遍历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,我可以管理。
答案 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);
}
}
}