[英]Delete DataRows from a DataTable
我想從數據表中刪除數據行。 要刪除的行在數據行列表“ wantDelete”中。 由於異常,請更正我的代碼:
foreach (DataRow dr in myTable.Rows)
{
if (wantDelete.Contains(dr))
myTable.Rows.Remove(dr);
}
例外是:
非常感謝你。
您無法在枚舉期間修改集合,因為foreach使用枚舉器,並且枚舉器無法更改基礎集合。
因此,您應該使用一個for-loop
或者使用您已預先過濾的另一個collection( deleteItems
)。
我在您的代碼中看到您已經對其進行了預過濾(我想wantDelete是一個List<DataRow>)
:
foreach (DataRow dr in wantDelete)
{
myTable.Rows.Remove(dr);
}
旁注:您知道從DataTable
中刪除行不會在dbms中刪除它們(如果您使用DataAdapter
嗎?)。 因此,您將需要使用DataRow.Delete()
。
在這種情況下,請勿使用foreach循環。 使用整數迭代:
for (int I = myTable.Rows.Count - 1; I >= 0; I -= 1) {
if (wantDelete.Contains(myTable.Rows(I))) {
myTable.Rows.Remove(myTable.Rows(I));
}
}
迭代DataTable的一部分時,不能刪除DataRow。 因此,在迭代時將DataRows存儲在另一個DataRows列表中,並刪除它:
List<DataRow> rowsToDelete = new List<DataRow>();
foreach (DataRow dr in myTable.Rows)
{
if (wantDelete.Contains(dr))
{
rowsToDelete.Add(dr);
}
}
foreach (var dataRow in rowsToDelete)
{
myTable.Rows.Remove(dataRow);
}
希望這可以幫助 ...
您正在循環並刪除同一張表。換句話說,刪除該行后,myTable.Rows將會更改,因此您不能在其上使用“循環”。 將表復制到另一個表並刪除它。 (foreach應該循環“復制”表並將其從“原始”表中刪除)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.