ADO.NET. Управление базами данных. Связь по схеме OLE DB провайдера. Коррекция стилей DataGridView, страница 13

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.