Изменение объекта DataRow
При необходимости внести значительные изменения в объект DataSet (Набор данных) и отложить при этом проверку ограничений и событий, можно использовать режим редактирования набора данных.
BeginEdit. EndEdit, CancelEdit
Переход в режим редактирования осуществляется вызовом метода BeginEdit объекта строки, которую необходимо изменить. Для выхода из этого режима используются методы EndEdit и CancelEdit.
В примере DataEditing мы нарушаем ограничение, заданное внешним ключом, добавляя в таблицу Books (Книги) строку, описывающую книгу автора, идентификатор которого отсутствует в базе данных. Исключение, являющееся результатом этого нарушения, возникнет только после вызова метода EndEdit. Так, при выполнении следующего фрагмента файла DataEditing.h примера DataEditing исключение не возникает.
DataRow *rowToEdit = books › Rows › get_Item(0); // книги › Строки rowToEdit › BeginEdit(); try { rowToEdit › set_Item("Author!d", _box(21)); } catch(Exception *e) // Исключение { Console::WriteLine( "\n {0] while editing a row.", e › Message); // при редактировании строки, Сообщение); Console::WriteLine(); }
Однако исключение возникает, как только в программе вызывается метод EndEdit.
try { rowToEdit › EndEdit(); } catch(Exception *e) // Исключение { Console::WriteLine(); Console::WriteLine( "\n{0} on EndEdit", e › Message); // Сообщение Console::WriteLine(); }
В результате будет напечатано следующее сообщение, указывающее на то, что по окончании сеанса изменения содержимого строки обнаружено нарушение ограничения.
ForeignKeyConstraint Authors › Books requires the child key values (21) to exist in the parent table, on EndEdit