如果datarow.delete()方法被調用,相應行的rowstate屬性就會被設定成datarowstate.deleted。當一個行的狀态是datarowstate.deleted的時候,正常情況下我們無法通路這一行。如果你需要檢索已删除的原始資料,可以使用其條目屬性的重載方法來傳遞datarowversion.original參數。
代碼像這樣:
采用datatable.rows[i].delete()删除行或在datagrid上按del鍵删除行後再通路該表時出現出現“不能通過已删除的行通路該行的資訊”的錯誤。原因如下:
delete()之後需要datatable.acceptechanges()方法确認完全删除,因為delete()隻是将相應列的狀态标志為删除,還可以通過datatable.rejectchanges()復原,使該行取消删除。
是以如果要徹底删除datarow,需要delete()和acceptechanges()方法同時使用,或者采用datatable.rows.removeat(i)方法直接删除,其中i表示行索引,還有一個就是datatable.rows.remove(datarow dr)删除指定行。
不過使用datatable.rows.removeat(i)要注意,如果連續使用datatable.rows.removeat(0);datatable.rows.removeat(1);這時并不是删除了原表中的0,1行,而是删除0行後,原來的1行就變成了0行,是以datatable.rows.removeat(1)實際删除的是原表的2行。此時應該 i = i - 1;
是以還是要慎用datatable.rows.removeat(i)
小注:
行版本(datarowversion)
行(datarow)對象有四種不同的行版本,分别是current,original,proposed和default。下面對這些行版本進行簡要的說明。
current:表示行的目前值。處于deleted狀态的行不存在該行版本。
original:表示行的原始值。處于added狀态的行不存在該行版本
proposed:表示行的建議值。不屬于表的行,即處于detached狀态的行存在該行版本;對于正在進行編輯的行,也存在該行版本。
default:表示行的預設版本。處于added,modified或則unchanged狀态的行的預設行版本是current;處于deleted狀态的行的預設行版本是original。處于detached狀态的行的預設版本是proposed。