集合已修改;枚举操作可能无法执行。

System.InvalidOperationException: Collection was modified; enumeration operation might not execute.

 

使用foreach或for循环删除DataRow的时候出的问题。

 

用dt.Rows.RemoveAt()或dt.Rows.Remove()或dt.Rows[i].delete()时都可能出现这个问题。

 

 

问题原因:row[i].delete()的时候(dt.Rows.RemoveAt()和dt.Rows.Remove()其实是先delete再AcceptChanges的),行的状态必须是Unchanged,才可以的,新增加的行里的状态是Added,然后抛出了刚才说的异常。

解决办法:循环找到datatable中每一行的行状态,都改为Unchanged。

for (int i = 0; i < dt.Rows.Count; i++) { if (dt.Rows[i].RowState == DataRowState.Added) { dt.Rows[i].AcceptChanges(); } }

你可能感兴趣的:(delete)