Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие по циклу лабораторных работ Технологии разработки программного обеспечения .doc
Скачиваний:
204
Добавлен:
06.03.2016
Размер:
3.8 Mб
Скачать
    1. Поиск объектов

Рассмотрим операцию поиска в приложении. Настроим поиск преподавателя по маске (строке, содержащей фамилию, имя или отчество).

  1. В компонент MainMenuдобавим пункт Найти. При выборе пункта будет создаваться окно, в котором можно будет по введенной строке осуществить поиск.

  2. Создадим новую форму wfLectSearch(классTLectSearch), в свойствеTextформы введем значение Поиск преподавателя. Настроим создание формы по выбору пункта Найти в главном меню формы Преподаватели. Настроим интерфейс созданной формы (см. Рисунок 10 .80).

Рисунок 10.83 – Настройка компонентов интерфейса

На форму поместим компонент TextBoxдля ввода строки, по которой будет осуществляться поиск. Результаты поиска будут выведены в таблице после нажатия кнопки Найти.

Компонент MainMenuсодержит пункты: Редактировать и Удалить, при выборе которых будут производиться соответствующие действия с выбранным в таблице преподавателем. Перед тем как отредактировать либо удалить объект проверим наличие хотя бы одного преподавателя в таблице.

if ehLecturer.GetList.Count <> 0

then

По нажатию кнопки Выход окно Поиск преподавателя закроется.

  1. Добавим в проект дескрипторы ehLecturerиcmhLecturer. Первый потребуются для осуществленияOCL-запроса и вывода полученной коллекции. Второй необходим для оперирования с выбранным в таблице преподавателем.

  2. Настроим поля таблицы так, чтобы можно было отобразить в ней название кафедры каждого преподавателя. Для этого надо настроить ehLecturer. Обратимся к свойствуColumnsэлементаehLecturer. Откроется диалоговое окно, предназначенное для настройки колонок. Новые колонки создаются в дополнение к уже существующим, автоматически созданным на базе текущих атрибутов класса Преподаватель. Для добавления колонок служит кнопкаAdd. При ее нажатии открывается меню выбора типа колонки. Создадим одну колонку. В свойствеNameзадается название колонки, введем в него строкуLectChair. В качестве выраженияOCLвведем конструкцию:

self.roleChair.ChairName

В ней происходит обращение к ссылке на кафедру (к окончанию ассоциативной связи roleChair), связанную с текущим преподавателем. Нажмем кнопку ОК – окно добавления колонки закроется. В таблице появится новая колонка LectChair.

  1. В обработчик нажатия кнопки Найти запишем код:

procedure TLectSearch.Button1_Click(sender: System.Object; e: System.EventArgs);

var

StrSearch: string;

StrExpression: string;

begin

StrSearch := TextBox1.Text;

StrExpression := 'clLecturer.allInstances->select(LecturerSNP. sqlLikeCaseInsensitive(''' + ' %' + StrSearch + ' %' + '''))';

ehLecturer.Expression := StrExpression;

dgLecturer.CaptionText := 'Результаты поиска';

end;

Переменная StrSearchпредназначается для хранения строки-параметра, которую передадим вOCL-запрос. С помощью переменнойStrExpressionбудет формироваться строка, которую передадим дескрипторуehLecturerв качестве выражения. ОперацияsqlLikeCaseInsensitiveиспользуется совместно с операциейSelectи обеспечивает поиск записей, содержащих заданную строку-параметр. При этом применим символ маски поиска (%). В результате запроса будут получены все записи в фамилии, имени или отчестве которых будет встречаться подстрока записанная в переменнуюStrSearch.

  1. Настроим функционирования пунктов главного меню. В обработчике выбора пункта меню Действие > Редактировать запишем операции сохранения текущего объекта Преподаватель в переменную CurLectтипаclLecturerи создания окна Редактирование преподавателя. К форме Редактирование преподавателя подключим форму Преподаватель, в которой уже объявлена переменнаяCurLect. В обработчике выбора пункта меню Действие > Удалить запишем операции удаления текущего объекта Преподаватель, как делали это раньше.

  2. Запустим приложение. Проверим работу поиска и действий с найденными преподавателями (см. Рисунок 10 .84).

Рисунок 10.84 – Поиск и редактирование объектов