Реклама:

Если назначаемое столбцу значение (e.ProposedValue или, что то же, e.Row[e.Column, DataRowVersion.Proposed]) не соответствует каким-либо ограничениям, то последующее копирование этого значения в версию Current столбца можно предотвратить. Для этого следует сгенерировать исключение.

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

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

this.dsVUZ1.Tables["Prep"].ColumnChanging +=

new DataColumnChangeEventHandler(this.PrepColumn_Changing);

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

private void PrepColumn_Changing( object sender,

DataColumnChangeEventArgs e )

{

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

{

if ((int)e.Row[e.Column, DataRowVersion.Proposed] > 100) { MessageBox.Show("Неверное значение KP"); throw new Exception(

"Значение KP не может быть больше 100!");

}

} }

Пример. В обработчике события Column_Changingпроверяется соответствие ограничениям значений, присваиваемых числовому столбцу KP и строковому столбцу Rank. Если значения не отвечают ограничениям, генерируется исключение.

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

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

DataColumnChangeEventHandler(this.PrepColumn_Changing);

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

private void PrepColumn_Changing ( object sender, DataColumnChangeEventArgs e ) { string sColName; //имя столбца

string sOldValue; //старое значение строковых столбцов int iOldValue; //старое значение числовых столбцов

string sNewValue; //новое значение строковых столбцов int iNewValue; //новое значение числовых столбцов

sColName = e.Column.ColumnName; switch (sColName) { case "KP":

//числовой столбец

iNewValue = (int)e.ProposedValue;//новое значение iOldValue = (int)(e.Row[e.Column]);//старое значение if (iNewValue > 15) {

MessageBox.Show(sColName + ", ошибочное значение : " + iNewValue.ToString() +" восстанавливается старое значение : " + iOldValue.ToString()); throw new Exception("Bad KP value!");

}

break; case "Rank":

//строковый столбец

sNewValue = (string)e.ProposedValue;//новое значение

sOldValue = (string)(e.Row[e.Column]);//старое значение

if ((sNewValue != "доцент") &

(sNewValue != "ассистент")){

MessageBox.Show(sColName +

", ошибочное значение : " + sNewValue + " восстанавливается старое значение : " +

sOldValue);

} throw new Exception("Bad Rank value!"); break;

}

}

_I

3.4.23.2. Событие ColumnChanged

public delegate void DataColumnChangeEventHandler( object sender, DataColumnChangeEventArgs e );

Событие наступает после изменения значения столбца. Параметр DataColumn ChangeEventArgs рассмотрен выше в предыдущем разделе.

В момент наступления события текущая версия Current все еще содержит старое значение столбца. Новое значение содержится в версии Proposed или в свойстве параметра e.ProposedValue.


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