C# 解決datatable想刪除不想要的多行方法



最近做東西,用到需要把一個datatbale的數據分爲符合的和不符合的數據,但是一旦刪除某一行索引值就會發生改變,如果用循環去remove的話就會出現刪除

數據有誤了,改用datatable.Rows[i].Delete()可解決問題。下面爲代碼示例:

                        for (int i = 0; i <= ArrDeleteRowNo.Length - 1; i++)
                        {
                            int arraa = ArrDeleteRowNo.Length;//用數組記錄要刪除的位置行數
                            DT_Query.Rows[ArrDeleteRowNo[i]].Delete();//記錄刪除位置

                        }
                        DT_Query.AcceptChanges();//提交刪除位置的改變

注意:

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


另外在網上還看到以下的方法 第一個還沒有試過,先收藏...

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

1,使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(index);可以直接刪除行
標註一下:DataTable.Rows.Remove(DataRow) 當改行被刪除以後,整個表的索引將重建,如果使用循環作爲dataRow的index訪問表格 則會出現錯誤,比如你要刪除的數據沒有刪除完;這是因爲 當你刪除了第八行,i++之後 訪問第九行數據,可是之前爲第九行的數據由於刪除了一行數據而爲而索引爲8 則訪問漏掉了一行數據。
這裏有我寫的一個例子,大家可以看看:


  1. for (int i = 0; i < history.Rows.Count; i++)//注意這裏一定要用Datatable的Rows.count 作爲循環條件終止的值,而不能用 一個定值,因爲每當刪除一條數據,表的行數會發生變化,訪問的下標則不會和未刪除之前的表一樣。  
  2. {  
  3.     if (!((lngX < 135.549864 && lngX > 73.27112) && (latY > 17.714548 && latY < 52.971885)))  
  4.     {  
  5.         history.Rows.Remove(history.Rows[i]);  
  6.         i--;//刪除之後原來索引爲i+1 處的行索引會因爲刪去一行而變爲i ,i-- 確保此條數據不被漏掉  
  7.     }  
  8. }  



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

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