Каждый объект DataRow имеет свойство RowState, которое обозначает текущее состояние или статус записи. Кроме того, каждая запись хранит информацию о четырех разных версиях своего значения. По мере редактирования записи изменяется ее состояние и версия значения. В табл. 5.1 приведено краткое описание свойства RowState, а в табл. 5.2 – краткое описание свойства DataRowVersion.
Таблица 5 1. Свойство RowState
| Член перечисления | Описание |
|---|---|
| Unchanged | Никаких изменений не внесено с момента последнего вызова метода AcceptChanges или после загрузки данных с помощью объекта DataAdapter |
| Added | Запись вставлена в коллекцию DataRowCollection (т.е. в свойство Rows объекта DataTable), но метод AcceptChanges еще не вызывался |
| Deleted | Метод Delete вызван для удаления записи, но метод AcceptChanges еще не вызывался |
| Modified | Запись изменена, но метод AcceptChanges еще не вызывался |
| Detached | Запись создана, но не добавлена в коллекцию DataRowCollection, либо метод Remove вызван для удаления записи из коллекции DataRowCollection, либо метод Delete вызван для удаления записи и вызван метод AcceptChanges |
Таблица 5.2. Свойство DataRowVersion
| Член перечисления | Описание |
|---|---|
| Original | Исходные значения записи. Эта версия не существует для строки со значением Added свойства состояния записи RowState |
| Current | Текущее (возможно измененное) значение записи. Эта версия не существует для строки со значением Deleted свойства состояния записи RowState |
| Default | Используемая по умолчанию версия записи, которая зависит от текущего состояния записи. Если состояние записи RowState имеет значение Deleted, то по умолчанию используется версия Original, если значение Detached – версия Proposed. Во всех остальных случаях по умолчанию используется версия Current |
| Proposed | Предлагаемое значение записи. Эта версия существует только во время редактирования (начинается с вызова метода BeginEdit и заканчивается вызовами методов EndEdit или CancelEdit) либо для записи, которая еще не включена в коллекцию DataRowCollection |
Если запись находится в состоянии Deleted в момент вызова метода AcceptChanges, то она удаляется из коллекции DataRowCollection. В противном случае версия записи Original обновляется версией Current, а состояние записи становится равным Unchanged.
Поскольку все четыре версии записей возможны далеко не всегда, то можно вызвать метод HasVersion для объекта DataRow, чтобы проверить конкретную версию в текущем состоянии. Методу HasVersion передается значение одного из членов перечисления DataRowVersion, а он возвращает логическое значение, которое указывает, существует ли данная версия.
Наоборот, если запись находится в состоянии Added в момент вызова метода RejectChanges, то запись удаляется из коллекции DataRowCollection. В противном случае версия записи Current обновляется версией Original, а состояние записи становится равным Unchanged.