簡體   English   中英

從數據表中刪除數據行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM