我循环遍历带有foreach
循环的数据集,尝试删除那些没有将ID与指定值匹配到数组的行,我想得到的索引ds
数据集中的当前行以删除该行。例如:
for(int i =1;i<=TotalWinners;i++)
{
foreach (DataRow dr in ds.Tables[0].Rows)
{
if (dr["ID"] != Winners[i, 0])
{
//int x = ds.Tables[0].Rows.IndexOf();
int index = ds.Tables[0].Rows.IndexOf[current row index]
}
}
}
如何在循环中获取该行的索引?如果我无法获取该行的索引,如何通过ID选择并删除该行?
答案 0 :(得分:3)
大多数集合在迭代foreach时不允许更改内容(删除)。如果要删除行,只需使用for循环而不是foreach。您可以在MSDN文章中删除DataTable How to: Delete Rows in a DataTable
中的行for (int i=0 i < ds.Tables[0].Rows.Count; i++)
{
if (ds.Tables[0].Rows[i]["ID"] != Winners[i, 0])
{
ds.Tables[0].Rows[i].Delete();
}
}
ds.AcceptChanges();
IEnumerator Interface wont allow changes like adding, modifying, or deleting elements
只要收集仍然存在,枚举器仍然有效 不变。如果对集合进行了更改,例如添加, 修改或删除元素,枚举器是不可恢复的 无效,下次调用MoveNext或Reset会抛出一个 InvalidOperationException异常。如果在之间修改了集合 MoveNext和Current,Current返回它设置的元素, 即使枚举器已经失效。
值得查看DataSet.AcceptChanges方法,该方法将提交DataSet
中所做的更改。