Реклама:

private void sqlDataAdapter1_RowUpdated(object sender,

System.Data.SqlClient.SqlRowUpdatedEventArgs e)

{

if (e.Status == UpdateStatus.ErrorsOccurred) {

//---сообщение об ошибке в строке

e.Row.RowError = e.Errors.Message;

//---сообщение об ошибке в одном из столбцов

e.Row.SetColumnError("KK",

"Значение уже изменено другим приложением"); MessageBox.Show("Ошибка при обновлении записи: " +

e.Errors.Message);

}

}

Все измененные записи приложения, которым отказано в переносе в источник данных, будут помечены как ошибочные (их свойство HasErrors будет установлено в true). Рассмотренный выше обработчик события RowUpdated заполнит для таких записей сообщение об ошибке (запишет значение в свойство RowError записи). Все эти записи останутся помеченными как модифицированные (свойство RowState строки будет продолжать хранить значение, отличное от Unchanged). В текущей и исходной версиях изменявшихся столбцов будут по-прежнему содержаться различные значения.

При констатации факта, что перенос изменений из приложения в источник данных сопровождался ошибками, нужно откатить изменения, послужившие источником ошибки, и снять в записях отметки об ошибках. Для этого следует: • Очистить свойства HasErrors и RowError в ошибочных строках. Это достигается выполнением метода ClearErrors каждой ошибочной строки либо всего набора данных в целом.

• Для измененных столбцов записать исходную версию их значения в текущую версию, а также пометить их как неизменявшиеся, добившись того, чтобы свойство RowState таких строк установилось в значение Unchanged. Для этого подойдет метод RejectChanges каждой ошибочной строки либо всего набора данных.

В приводимом ниже фрагменте кода снятие признака ошибки и откат изменений производится для каждой из ошибочных строк набора данных:

//---получим все ошибочные записи

DataRow[] ar_dr = dsVUZ1.Kaf.GetErrors(); foreach (DataRow dr in ar_dr)

{

if (dr.HasErrors)

{

dr.RejectChanges(); //отменим изменения

dr.ClearErrors(); //очистим признак ошибки

}

}

6.1.6. Подтверждение изменений методом AcceptChanges

Метод AcceptChanges подтверждает изменения в записи, таблице или наборе данных. При этом:

• исходная версия измененных столбцов записи (Original) приравнивается к текущей версии (Current);

• запись помечается как неизменявшаяся (свойство RowState = Unchanged), в силу чего последующие выполнения методов Update эту строку не затрагивают, а ранее внесенные в такую строку изменения не будут запомнены в источнике данных, т. е. попросту говоря, потеряются.

Для строки (объект DataRow), таблицы (объект DataTable) и набора данных (объект DataSet) вид метода одинаков:

public void AcceptChanges();

Выполнение метода затрагивает все строки объекта, для которого он вызван, -только текущую строку (вызван метод объекта DataRow), все записи таблицы (метод объекта DataTable) и все записи набора данных (метод объекта DataSet).

Пример. Пусть запись принадлежит таблице данных Kaf из набора dsVUZ1. В элементах управления типа TextBox будем выводить текущее состояние записи и версии значений столбца Код кафедры — исходную и текущую. Изменим код кафедры с 2 на 55 (рис. 6.7).


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