C#中刪除DataTable中的行的方法

1、在C#中,如果要刪除DataTable中的某一行,大約有以下幾種辦法:

•使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(index);可以直接刪除行
•datatable.Rows[i].Delete()。Delete()之後需要datatable.AccepteChanges()方法確認完全刪除,因爲Delete()只是將相應列的狀態標誌爲刪除,還可以通過datatable.RejectChanges()回滾,使該行取消刪除。
•在刪除DataTable中的行的時候,每刪除一行,DataTable中所有行的索引都會發生改變。在循環刪除DataTable.Row的時候不能使用foreach。使用foreach進行循環的時候,是不允許Table有刪除和添加操作的。
•如果是按某列爲條件進行刪除,則每刪完一行,整個Table的index就會立即發生變化,等於Table已經變成了一個新的表。但是索引卻已經加1了。於是會造成第一列永遠匹配不到。因此,每刪除完一行,要跟着判斷第一行是否滿足刪除條件。
•如果要刪除DataTable中的多行,應該採用倒序循環DataTable.Rows。因爲正序刪除時索引會發生變化。程式發生異常,很難預料後果。(不要在循環裏使用myDataTable.Rows.RemoveAt(i).因爲每刪除一行後.i的值會增加,但行數會是減少了.這麼做一定會出錯.因此要遍歷數據,使用Remove方式時,要倒序的遍歷)

int count = ds.Tables[0].Rows.Count;
for (int i = count -1; i >=0; i--)

ds.Tables[0].Rows.RemoveAt(i);
}

 

總結:

delete和remove

•Delete的使用是 datatable.Rows[i].Delete();
•Remove的使用是datatable.Rows.Remove(datatable.Rows[i]);
•這兩個的區別是,使用delete後,只是該行被標記爲deleted,但是還存在,用Rows.Count來獲取行數時,還是刪除之前的行數.需要使用datatable.AcceptChanges()方法來提交修改.
而Remove方法則是直接刪除.(有時候發現使用ds.Tables[0].Rows[i].Delete();數據行也被直接刪除了,原因是在創建datatable時沒有執行AcceptChanges這個方法,那麼在delete時,不會標記,會直接刪除掉。)
•如果在for循環裏刪除行的話,最好是使用delete方法,不然會出現count變化的情況.循環完後再使用AcceptChanges()方法提交修改,刪除掉標記爲deleted的行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章