Реклама:

Если по каким-либо причинам внесенное изменение нужно отменить, то генерация исключения тут уже не годится, но вполне сработает принудительный возврат значения столбца к его исходной версии. Конечно, нужно помнить, что если в обработчике события ColumnChanged вновь изменить значение столбца, то снова наступит событие Co1umnChanged. Поэтому разработчик, применяющий такой метод отката значения столбца к его исходной версии, должен следить, чтобы генерация события Co1umnChanged не привела к бесконечному циклу. В рассматриваемом ниже примере, если текущая версия столбца превосходит 100, происходит возврат к исходной версии. Это приводит к наступлению нового события Co1umnChanged и рекурсивному вызову обработчика этого события. Однако поскольку исходное значение столбца уже не превышает 100, происходит возврат из рекурсивного обработчика события Co1umnChanged в первый, породивший его обработчик этого события; на том все и заканчивается.

Пример. Значение столбца KP таблицы Prep набора данных dsVUZl не может превышать 100. При изменении значения столбца нужно выполнить проверку. Если назначаемое значение больше 100, изменения следует отменить.

//---подключим обработчик к таблице

this.dsVUZ1.Tables["Prep"].ColumnChanged += new DataColumnChangeEventHandler(this.PrepColumn_Changed);

//---обработчик события

private void PrepColumn_Changed( object sender,

DataColumnChangeEventArgs e )

{

if (e.Column.ColumnName == "KP") {

if ((int)e.Row[e.Column, DataRowVersion.Proposed] > 100) {

MessageBox.Show("Неверное значение KP!!!"); e.Row[e.Column] = e.Row[e.Column, DataRowVersion.Current];

} }

}

3.4.23.3. СобытиеRowChanging

public delegate void DataRowChangeEventHandler( object sender, DataRowChangeEventArgs e);

Событие наступает в процессе изменения записи (объект DataRow). Если изменения начаты не методом BeginEdit, событие RowChanging генерируется для каждого измененного столбца записи немедленно после события ColumnChanging. Если изменения начаты методом BeginEdit, то событие RowChanging генерируется только при вызове метода EndEdit.

Если одно или несколько значений в измененной строке не удовлетворяют каким-либо условиям, то отказаться ото всех этих изменений можно, сгенерировав исключение.

Параметр e обработчика события содержит следующие свойства:

_Свойство__Описание_

Action Показывает тип изменения для строки

Row Содержит ссылку на изменяемую строку

Свойство Action параметра e обработчика события - это значение перечисления

System.Data.DataRowAction:

Значение

Описание

Add

Запись добавляется в таблицу

Change

Запись изменяется

Commit

Внесенные в запись изменения подтверждаются

Delete

Запись удаляется из таблицы

Nothing

Запись не изменяется

Rollback

Внесенные в запись изменения откатываются

Пример. Значение столбца KP не должно превышать 15. Столбец Rank не может содержать значение "лаборант". Используем для контроля значений столбцов обработчик события RowChanging.

//---подключим обработчик к таблице

this.dsVUZ1.Tables["Prep"].RowChanging += new


⇐ Предыдущая страница| |Следующая страница ⇒