C# datatable 不能通過已刪除的行訪問該行的信息處理


   寫的一個控件DataGridEX,繼承與DataGridView,其有3個核心函數:

     getInsertList(),獲取新增行記錄集合

     getUpdateList(),獲取更新行記錄集合

     getDeleteList(),獲取刪除行記錄集合

     最近,程序在運行過程中突然報錯“不能通過已刪除的行訪問該行的信息”,網上google了下,這個問題還挺多,眾說紛紜,個人感覺都沒有一個清晰的解決方案。

     原因分析:

     造成datatable的“不能通過已刪除的行訪問該行的信息”原因其實很簡單,程序在讀取已被刪除的行記錄信息。假設datatable原有4條記錄,刪除后2條記錄,現在做如下讀取操作:

     //_table,為DataTable

     int rowcount = this._table.Rows.Count;

     for (int i = 0; i < rowcount; i++)

    {

         String status = (String)_table.Rows[i][“status”];   //讀取該行的狀態信息

     }

     正常情況下上述代碼可以成功執行,單是有時讀取到的rowcount值還是4,即被刪除的2條記錄還是可以讀取到,這時讀取第3、4條記錄_table.Rows[i][“status”]時就會報“不能通過已刪除的行訪問該行的信息”錯,因為這2條記錄已經被刪除。

     解決方案:

     1)追蹤c#為何通過_table.Rows.Count還可以讀取到被刪除的記錄數,根據這些原因我們在程序代碼里一一予以排除;

     2)讀取_table.Rows[i][“status”]信息時,先判斷該條記錄是否已經被刪除。

     由於1)方案我們很難去追蹤在哪些情況下還可以讀取到被刪除的記錄,因此建議使用2)方案,即不會出錯,有簡單。

 

     使用2)方案修改后的讀取代碼如下:

     //_table,為DataTable

     int rowcount = this._table.Rows.Count;

     for (int i = 0; i < rowcount; i++)

    {

         //跳過被刪除的記錄

         if (this._table.Rows[i].RowState == DataRowState.Deleted)

              continue;

         String status = (String)_table.Rows[i][“status”];   //讀取該行的狀態信息

     }

原文地址: http://blog.csdn.net/chuangxin/article/details/5844583


免責聲明!

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



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