Datatable刪除行的Delete和Remove方法

在C#中,若是要刪除DataTable中的某一行,大約有如下幾種辦法:html

1,使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(index);能夠直接刪除行htm

2,datatable.Rows[i].Delete()。Delete()以後須要datatable.AccepteChanges()方法確認徹底刪除,由於Delete()只是將相應列的狀態標誌爲刪除,還能夠經過datatable.RejectChanges()回滾,使該行取消刪除。blog

只是delete掉的效果以下:索引

在刪除DataTable中的行的時候,每刪除一行,DataTable中全部行的索引都會發生改變。在循環刪除DataTable.Row的時候不能使用foreach。使用foreach進行循環的時候,是不容許Table有刪除和添加操做的。
若是是按某列爲條件進行刪除,則每刪完一行,整個Table的index就會當即發生變化,等於Table已經變成了一個新的表。可是索引卻已經加1了。因而會形成第一列永遠匹配不到。所以,每刪除完一行,要跟着判斷第一行是否知足刪除條件。rem

 

=========================================================for循環

2011-9-8table

若是要刪除DataTable中的多行,應該採用倒序循環DataTable.Rows。由於正序刪除時索引會發生變化。程式發生異常,很難預料後果。foreach

for (int i = dt.Rows.Count - 1; i >= 0; i--)
{
          dtOGBHIS.Rows.RemoveAt(i);
 }循環

 

總結: 方法

delete和remove

 

Delete的使用是 datatable.Rows[i].Delete();

Remove的使用是datatable.Rows.Remove(datatable.Rows[i]);

這兩個的區別是,使用delete後,只是該行被標記爲deleted,可是還存在,用Rows.Count來獲取行數時,仍是刪除以前的行數.須要使用datatable.AcceptChanges()方法來提交修改.

 

而Remove方法則是直接刪除.

 

若是在for循環裏刪除行的話,最好是使用delete方法,否則會出現count變化的狀況.循環完後再使用AcceptChanges()方法提交修改,刪除掉標記爲deleted的行 

 

轉自http://www.cnblogs.com/jhxk/articles/2328744.html

相關文章
相關標籤/搜索