logo
Учебное пособие по циклу лабораторных работ Технологии разработки программного обеспечения

Связывание интерфейса с моделью

  1. Сформируем три дескриптора ЕСО: ehLecturer,ehSubject(экземпляры классаExpressionHandle) для организации доступа к объектам модели и пространства ЕСО во время работы программы иcmhLecturer(экземпляр классаCurrensyManagerHandle), который будет служить для указания на текущий объект таблицы Преподаватели.

  1. Настроим таблицу Дисциплины так, чтобы она отражала список дисциплин, принадлежащих выбранному преподавателю в первой таблице. Свяжем дескриптор cmhLecturerс таблицейdgLecturerчерез свойствоBindingContext. Теперь он отслеживает выделенную строку этой таблицы.

  2. Настроим дескриптор cmhLecturerна связь с родительским объектом. Зададим ссылку на объектehLecturerв свойствеRootHandle, определяющем корневой идентификатор ЕСО.

  3. В свойстве RootHandleдескриптораehSubjectвыберем значениеcmhLecturer. Так задают место данного идентификатора в цепочке доступа к объектному пространству ЕСО.

  4. В качестве выражения OCLвведем в свойствоExpressionобъектаehSubjectстроку self.roleSubjects. Здесь roleSubjects – это имя роли классаSubjectв его ассоциативной связи с классом Преподаватель. Это выражение определяет список дисциплин, предложенных и назначенных преподавателю, который выбран в таблице Преподаватели.

  5. Свяжем таблицу Преподаватели с дескриптором ehLecturerчерез ее свойствоDataSource, а таблицу Дисциплины – с дескрипторомehSubject. Теперь таблицы отображают поля классов Преподаватель и Дисциплина. Кроме этого, в таблице Дисциплины появилось полеSubjectState, которое будет автоматически отображать текущее состояние дисциплин.

  6. Настроим стили таблиц. Воспользуемся свойством таблицы TableStyles. Присвоим полям таблиц русскоязычные названия.

  7. Настроим функционирование кнопок. Выделим в окне Проектировщика кнопку Button1. В свойствеEcoListActionвыберем значениеAdd. В свойствеRootHandleвыберем подходящий поставщик объектов ЕСО – идентифика­торehSubject. Свяжем результат действия кнопки (созданный экземпляр класса Дисциплина) с визу­альным элементом, отображающим этот экземпляр, в нашем случае — с таблицейdgSubject. Для этого в свойствеBindingContextвыберем имяdgSubject. Аналогично настроим кнопкуButton2 на операцию удаления. Выберем компонентEcoListActions, в его свойствеCaptionAddвведем слово Добавить, а в свойствеCaptionDelete– Удалить. Кнопки автоматически получила название Добавить и Удалить. В свойствеTextкнопкиButton3 введем значение Сохранить (см. Рисунок 9 .68).

  8. Запустим приложение. Добавим несколько объектов в таблицу Дисциплины для выбранного преподавателя. В поле Состояние таблицы Дисциплины все объекты имеют одинаковое значение ChosenLecturer. На данный момент это состояние неизменяемо. Чтобы иметь возможность изменять состояния, произведем следующую модификацию пользовательского интерфейса.