我有一個DataTable和一個網格(實際上是一個DevExpress Winforms XtraGrid)。我在作爲其行的子集的表上創建DataView。這個DataView是網格的數據源。DataRow.RejectChanges拋出RowNotInTableException異常
用戶在網格中鍵入新行併發布更改(單擊網格的複選標記)。然後他們決定通過點擊取消按鈕(在我的表單上)來恢復他們的所有更改。
在按鈕處理程序中,我想將DataView中的行恢復爲其原始狀態。我不想恢復DataTable中的所有行。
我通過數據視圖的列一下,拒絕在每行的變化,如:
foreach (DataRowView drv in myDV)
{
MyTableRow row = (MyTableRow)drv.Row;
row.RejectChanges();
}
這工作正常恢復更新。但是,如果用戶在網格中插入了新行,我會得到以下異常:調用RejectChanges時拋出System.Data.RowNotInTableException。這裏是堆棧跟蹤異常:
at System.Data.DataRow.GetDefaultRecord()
at System.Data.DataColumn.CheckNullable(DataRow row)
at System.Data.DataTable.RaiseRowChanging(DataRowChangeEventArgs args, DataRow eRow, DataRowAction eAction, Boolean fireEvent)
at System.Data.DataTable.SetNewRecordWorker(DataRow row, Int32 proposedRecord, DataRowAction action, Boolean isInMerge, Boolean suppressEnsurePropertyChanged, Int32 position, Boolean fireEvent, Exception& deferredException)
at System.Data.DataRow.RejectChanges()
這不是我所期望的行爲。我預計它會簡單地從數據表中刪除這行,一切都會很酷。
有關如何獲得我正在尋找的行爲的任何想法?
爲什麼人們繼續使用來自pre-generics .Net 1.1的無類型的'DataTable'? –