Войти



Поиск

Реклама

Полезное:

Новые статьи

Опечатка?

Выделите текст и нажмите Shift+Enter.
И мы в ближайшее время ее исправим!

Счетчики


Поддержка транзакционного редактирования объекта при помощи lEditableObject

Если бы вы запустили образец CustomBusinessObject из предыдущего примера, отредактировали в сетке свойство любого из объектов Customer или order, а затем клавишей табуляции перешли к следующему полю, отредактированное значение этого свойства было бы немедленно записано в свойство привязанного объекта. Если есть другие элементы управления, привязанные к тому же объекту и отображающие его, вы должны были бы увидеть, как они также немедленно показывают новое значение. Это происходит потому, что изменение было произведено через привязанный к данным элемент управления, который уведомляет об изменении синхронизатор, контролирующий привязку данных, и это изменение будет передано любым другим элементам управления, находящимся в соединении с тем же синхронизатором.

Такое поведение может соответствовать, а может и не соответствовать вашим намерениям. Иногда, когда вы редактируете объект, вы хотите, чтобы его изменения производились как транзакция, то есть все изменения свойств одного объекта делались одновременно или не делались вообще. Скажем, у вас есть специальный объект с тремя свойствами, привязанными к элементам управления на форме. Вы редактируете свойства номер один и номер два объекта, а затем при редактировании свойства номер три что-то идет не так. Хотите ли вы, чтобы изменения свойств номер один и номер два оставались в силе, или вы хотите, чтобы они вернулись к тому состоянию, которое имело место до начала операции редактирования на этом объекте? А возможно, между свойствами имеется взаимосвязь, когда первое свойство может принимать значения только между 1 и 10 по вторникам, а в остальные дни должно находиться между 10 и 20. Если второе свойство говорит вам о том, какой сегодня день, то вы не будете знать, допустима ли комбинация значений в строке, пока они все не будут отредактированы. В транзакционной системе изменения этих свойств можно автоматически «откатить» к предыдущим значениям, если что-то пошло неправильно или вы решили, что хотите прекратить процесс редактирования.

Класс DataRowView (как и DataGridView) имеет встроенную поддержку такого рода поведения. Если вы привязали сетку к набору данных и начинаете редактировать поля в строке, а затем нажимаете клавишу Esc, сделанные вами изменения будут откачены и значения полей вернутся к первоначальным значениям, имевшим место до начала редактирования этой строки. Если вы клавишей со стрелкой переведете фокус ввода на другую строку, выйдете табуляцией за последнее поле строки, нажмете Enter или щелкнете на другом элементе управления или строке, изменения будут приняты (зафиксированы) и у вас больше не будет возможности вернуть их к первоначальным значениям.

Аналогичным образом, если ваша сетка организована так, что пользователям разрешено добавлять новые строки, и пользователь начинает вводить значения в новой строке, то эти вводимые значения должны куда-то помещаться, но сетка отображает только строки, действительно входящие в привязанную таблицу. Поэтому, когда вы начинаете редактировать поля пустой строки в самом низу сетки, которая помечена звездочкой в ячейке заголовка строки, к таблице фактически добавляется новая строка DataRow, и вы редактируете поля в этой строке, как редактируете любую строку сетки. Но если во время редактирования новой строки вы нажмете Esc, сетка будет способна удалить строку из таблицы и сделать вид, будто ее никогда и не было. Это другая форма транзакционного редактирования объекта, когда новый объект не рассматривается как окончательно входящий в коллекцию, пока первоначальное редактирование вновь создаваемого объекта не будет завершено. Однако для целей отображения при привязке данных вам обычно необходимо физически добавить этот объект к коллекции до того, как редактирование будет завершено, чтобы для введенных значений полей или свойств существовал объект в памяти, на котором их можно было бы установить и который мог бы отображаться посредством нормальных механизмов привязки данных.




Newer news items:
Older news items:

 
Главная Страница Контактная Информация Поиск по сайту Контактная Информация Поиск по сайту