Реклама:

в результате чего происходит ошибка: записи с кодом кафедры = 2 в таблице находящейся в источнике данных, уже нет. Как и предписано в обработчике sqlDataAdapterl_RowUpdated, выдается уведомление об ошибке и продолжается запоминание изменений других записей.

В элементе управления DataGrid ошибочная запись, изменения в которой не удалось запомнить в источнике данных, маркируется особым образом, как это показано на рис. 6.17.

Шумаков П. В.  ADO.NET и создание приложений баз данных в среде Microsoft Visual Studio .NET. Руководство разработчика с примерами на C#.

J рис. 6.17

Вне зависимости от того, пытались ли мы в приложении отлавливать ошибки в обработчике события RowUpdated адаптера данных, все отторгнутые источником записи данные маркируются как ошибочные. Их свойство

public bool HasErrors {get;}

автоматически устанавливается в значение true.

Ошибочные строки исправляют (по возможности локализуя источник ошибки), после чего строку очищают от ошибок. Очистка выполняется методом ClearErrors объекта строки

public void ClearErrors();

и состоит в сбросе значения свойства HasErrors ошибочной строки в значение false, очистке значения свойства RowError и, если они установлены, сообщений об ошибках для отдельных столбцов1 записи.

Примечание. Локализация источника ошибки состоит либо в полном отказе от внесенных в запись изменений методом RejectChanges объекта строки, либо в исправлении неверных значений каких-либо столбцов записи, после чего может быть снова предпринята попытка выполнить метод Update адаптера.

Пример. Для всех ошибочных строк в таблице Kaf набора данных dsVUZl производится откат изменений и очистка статуса ошибочной строки:

foreach (DataRow dr in dsVUZl.Kaf.Rows) { if (dr.HasErrors) {

dr.RejectChanges(); dr.ClearErrors();

}

}

Выше показан первый способ поиска ошибочных строк в таблице данных. Он основан на переборе всех строк таблицы и анализе значения свойства HasErrors каждой строки.

Другой способ состоит в получении массива ошибочных строк методом таблицы данных:

public DataRow[] GetErrors();

Пример. Сделаем то же, что и в предыдущем примере: для всех ошибочных строк в таблице Kaf набора данных dsVUZl откатим изменения и очистим статус ошибочной строки:

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

if (dr.HasErrors) {

dr.RejectChanges(); dr.ClearErrors();

}

}

_I

Сообщение об ошибке можно назначить не только строке, но и отдельному столбцу. Метод SetColumnError объекта DataRow :

public void SetColumnError( DataColumn column, string error ); public void SetColumnError( string column, string error );

задает сообщение об ошибке для столбца данных. Ошибки столбцов данных можно обрабатывать методом GetColumnsInError объекта DataRow:

public DataColumn[] GetColumnsInError();

Извлечь описание ошибки для конкретного столбца можно методом объекта DataRow, указав либо ссылку на объект столбца, либо его индекс в коллекции DataColumns строки, либо имя столбца:

public string GetColumnError( DataColumn column ); public string GetColumnError( int index ); public string GetColumnError( string columnName );

Пример. Пусть обработчик события RowUpdated адаптера данных присваивает сообщение об ошибке не только строке, но и ошибочному столбцу. Несомненно, что в строке источником ошибки могут служить значения нескольких столбцов. Чтобы впоследствии определить, какой именно столбец послужил источником ошибки, нужно написать дополнительный код, анализирующий, например, текст сообщения об ошибке и т.д. В настоящем примере этого для простоты не предпринимается; считается, что ошибка всегда проистекает из неверного значения столбца KK


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