DataRowState |
Описание |
Detached |
Строка была создана, но еще не стала частью коллекции DataRowCollection таблицы или строка была удалена из коллекции. |
Added |
Строка добавлена в коллекцию строк таблицы (table.Rows.Add (row);), но вставка не закреплена вызовом AcceptChanges. |
Unchanged |
Строка закреплена в таблице (после вызова AcceptChanges) и не изменилась с тех пор. |
Modified |
Строка изменена, например командой row["Name"] = "Peter";. |
Deleted |
Строка удалена, например командой row.Delete(); |
Вновь просмотрите обработчик события RowUpdated. Если строка в состоянии Deleted, то мы не можем выяснить ее IDENTITY (сообщение об этом вы уже видели). Для обхода этой ситуации был вставлен условный оператор и теперь сообщение не возникает. Строки в состоянии Deleted безвозвратно удаляются после вызова AcceptChanges, который автоматически происходит в конце алгоритма выполнения метода UpdateDB.
В определенные моменты жизни приложения вы можете вызвать AcceptChanges для всех строк DataTable. Это провоцирует вызов AcceptChanges объектов класса DataRow (для всех строк таблицы). Вызов AcceptChanges также необходим для того, чтобы перевести текущую строку таблицы из состояния Added в состояние Unchanged, что мы и делаем в обработчике события RowUpdated.
Следующая таблица содержит перечень состояний свойства RowStateFilter объекта DataView, описываемых перечислением DataViewRowState. Они обычно используются при работе с объектами DataView. Мы можем настроить DataView (а, следовательно, и связанный с ним DataGridView) на отображение только тех строк, которые соответствуют указанной версии.
DataViewRowState |
Описание |
Значение |
None |
None |
0 |
Unchanged |
Неизмененные (немодифицированные) строки |
2 |
Added |
Вновь добавленные строки |
4 |
Deleted |
Удаленные строки |
8 |
ModifiedCurrent |
Текущие версии модифицированных строк |
16 |
ModifiedOriginal |
Оригинальные версии модифицированных строк |
22 |
CurrentRows |
Неудаленные строки (объединение флагов ModifiedCurrent, Added, Unchanged) |
32 |
OriginalRows |
Оригинальнне версии удаленных, модифицированных и немодифицированных строк (объединение флагов ModifiedOriginal, Deleted, Unchanged) |
42 |
Числовые значения в последней колонке приведены для того, чтобы вы поняли, что некоторые элементы являются результатом объединения (операцией bitwise-OR) других элементов этого же перечисления. Например, элемент перечисления CurrentRows (со значением 22 = 16 + 4 + 2) на самом деле является объединением элементов множества: { ModifiedCurrent, Added, Unchanged }.
Перечисление DataViewRowState используется для фильтрации данных с помощью объектов класса DataView и DataGridView. Для иллюстрации этой технологии в существующем проекте введите для DataGridView обработчик события CurrentCellChanged, добавьте еще один объект DataGridView (назвав его gridChange) и вставьте код, в котором создается новый образ данных (DataView). Он настроено на отображение удаленных, добавленных и измененных записей.
void gridStud_CurrentCellChanged (object sender, EventArgs e)
{
DataView dv = new DataView (ds.Tables[0]);
dv.RowStateFilter = // Установка фильтра отбора данных с помощью свойства RowStateFilter
DataViewRowState.Deleted | DataViewRowState.Added | DataViewRowState.ModifiedCurrent;
gridChange.DataSource = dv;
}
Запустите приложение и проверьте его функционирование в различных режимах. Проанализируйте и постройте хронологию событий.
При обращении к строке таблицы (объекту DataRow) с помощью индексатора или метода DataRow.GetChildRows используется перечисление DataRowVersion. Оно описывает текущую версию строки в объекте DataRow.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.