У меня есть DataTable и Grid (на самом деле DevExpress Winforms XtraGrid). Я создаю DataView в таблице, которая является подмножеством ее строк. Этот DataView является источником данных сетки.DataRow.RejectChanges Throwing RowNotInTableException
Пользователь вводит новую строку в сетку и публикует изменения (щелкает галочкой для сетки). Затем они решают, что хотят вернуть все свои изменения, нажав кнопку отмены (в моей форме).
В обработчике кнопок я хочу вернуть строки в DataView в исходное состояние. Я не хочу возвращать все строки в DataTable.
Я смотрю через строки DataView, отвергая изменения в каждой строке, например:
foreach (DataRowView drv in myDV)
{
MyTableRow row = (MyTableRow)drv.Row;
row.RejectChanges();
}
Это прекрасно работает для обновления возвращаясь. Однако, если пользователь вставил новую строку в сетку, я получаю исключение: System.Data.RowNotInTableException, которое вызывается при вызове RejectChanges. Вот трассировка стека к исключению:
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()
Это не то поведение, которое я ожидал. Я ожидал, что он просто удалит эту строку из datatable, и все будет круто.
Любые мысли о том, как получить поведение, которое я ищу?
Почему люди продолжают использовать нетипизированный материал 'DataTable' из pre-generics .Net 1.1? –