Datatable刪除行的Delete和Remove方法比較


Delete使用是 datatable.Rows(i).Delete()

Remove使用是datatable.Rows.Remove(datatable.Rows(i))

兩者的區別是:

使用Delete后,只是該行被標記為deleted,記錄還存在的,用Rows.Count來獲取行數時,還是刪除之前的行數,要使刪除生效,需要使用datatable.AcceptChanges()方法來提交修改。

而Remove方法則是直接刪除, 如果是按某列為條件進行刪除,則每刪完一行,整個Table的index就會立即發生變化,等於Table已經變成了一個新的表。但是索引卻已經加1了。

於是會造成第一列永遠匹配不到。因此,每刪除完一行,要跟着判斷第一行是否滿足刪除條件。

所以在循環刪除一個datatable中的行的時候,每刪除一行,DataTable中所有行的索引都會發生改變。如果使用foreach遍歷DataTable循環刪除或者是使用for語句正序遍歷DataTable循環刪除

就會拋出異常錯誤,這也是在循環刪除DataTable.Row的時候不能使用foreach的原因所在。使用foreach進行循環的時候,是不允許Table有刪除和添加操作的。

1,使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(index);可以直接刪除行,循環刪除可以采用for倒序循環DataTable.Rows

2,datatable.Rows[i].Delete()。Delete()之后需要datatable.AccepteChanges()方法確認完全刪除,因為Delete()只是將相應列的狀態標志為刪除,還可以通過datatable.RejectChanges()回滾,使該行取消刪除。

如果要使用Remove刪除DataTable中的多行,應該采用倒序循環DataTable.Rows。因為正序刪除時索引會發生變化。程式發生異常,很難預料后果。

For i As Integer = dt.Rows.Count - 1 To 0  Step -1
    'dt.Rows.Remove(dt.Rows(i))
    dt.Rows.RemoveAt(i)
Next

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM