|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Глава 5 Итак, что же такое DataWindow? DataWindow является одной из главных особенностей PowerBuilder. Оно позволяет организовать доступ к данным и их визуализацию практически без написания кода. Можно сказать, что DataWindow - сердце PowerBuilder, его основа. Без DataWindow PowerBuilder был бы просто одним из многих средств RAD, причем хуже своих собратьев. Наличие DataWindow выводит PowerBuilder на первое место среди средств RAD при создании пользовательских интерфейсов приложений БД. Существует 2 типа объектов, представляющих DataWindow:
DataWindow control - объект пользовательского интерфейса, через который происходит работа пользователя с данными и доступ к возможностям DataWindow object. DataWindow в значительной степени облегчает построение именно ИНТЕРФЕЙСА пользователя к данным, позволяя производить оформление данных, практически не прибегая к написанию кода. Для этого в DataWindow существует механизм выражений (expressions), о которых будет подробно рассказано ниже. Итак, DataWindow - это объект доступа и отображения данных из БД. Рассмотрим его более подробно. Для начала познакомимся с первой частью DataWindow - DataWindow object. По стилю представления данных DataWindow различаются на 11 видов:
По источникам DataWindow разделяются на 5 способов построения:
В этом списке есть один интересный пункт. Это external DataWindow. Этот вид позволяет организовать ПРОИЗВОЛЬНЫЕ данные в один набор и работать с ним, как с одним набором. Этот набор данных необязательно является данными из БД, он формируется произвольно. Зачем это нужно? Это нужно для того, чтобы при построении отображения произвольных данных можно было использовать всю мощь DataWindow. Для создания DataWindow нам потребуется тестовая база данных, состоящая из
нескольких таблиц. На мой взгляд, для этой цели лучше всего подойдет небольшая база MS Access.
Давайте создадим ее. Создайте на диске "С:" в папке "Project", которую мы создавали
для нашей первой программы, папку "DataWindow". В этой папке создайте файл базы данных
MS Access с именем "DW_Test.mdb". Откройте его с помощью MS Access и создайте таблицу
"sotr", состоящую из следующих полей:
На основе этого источника ODBC создайте профиль PowerBuilder (рис. 1) и соединитесь с ним. Теперь можно создавать DataWindow. Для этого выберите в меню "File" пункт "New", на мастере создания объектов перейдите на закладку "DataWindow", выберите стиль представления "Grid" и нажмите кнопку "Ок" (рис. 2).
После этого откроется диалог выбора источника. Выберите "SQL Select" и нажмите "Далее". Откроется окно SQL Query Painter и диалог выбора таблиц (рис. 3). Выберите в нем единственную, пока, таблицу "Sotr" и нажмите "Open". Рис. 3 Рис. 4 PowerBuilder откроет представление таблицы и позволит выбрать поля, участвующие
в запросе (рис. 4). Выберите все поля и кликните на последнюю иконку во второй панели инструментов
для окончания построения запроса и возврата в мастер построения DataWindow. На последнем шаге мастера
можно установить дополнительные свойства DataWindow, такие как, например, цвет фона, цвета шрифта и
стиль заголовков и столбцов. Нажмите кнопку "Далее", а за тем кнопку "Ок". Поздравляю,
Вы только что создали DataWindow! Его внешний вид показан на рис. 5. Рис. 5 Сохраним его под именем "dw_1". Итак, мы построили простое DataWindow. Как правило, простейшие DataWindow используются редко; ради такого не стоило создавать такой сложный механизм. Теперь мы начнем вносить дополнения в созданное нами DataWindow. И начнем с того, что требуется очень часто - вычислимые поля. Их можно условно разделить на поля запроса и поля, за вычисление которых отвечает само DataWindow. Для добавления вычислимого поля запроса надо перейти в режим ручного редактирования запроса и добавить вычисления согласно правилам синтаксиса того сервера БД, на который рассчитано приложение. Чаще всего синтаксис выражений будет общим для всех серверов, но, применяя специфические выражения, необходимо помнить, что приложение может стать непереносимым, привязанным к определенному серверу БД. Да-да, именно к серверу БД, поскольку добавленные в SQL запрос выражения будут вычисляться СЕРВЕРОМ, на клиента, то есть в DataWindow поступит только результат. В отличие от полей запроса, вычислимые поля DataWindow вычисляются самим объектом DataWindow на основе данных, которые находятся в нем и примененных к ним функций. Существует большое количество функций DataWindow. Нет совершенно никакой возможности описать их здесь все. Необходимо, однако, добавить, что если чего-либо не хватает, то можно самостоятельно написать необходимую функцию, сделав ее глобальной, а затем использовать в DataWindow как встроенную функцию. Вычислимые поля в запросах мы рассмотрим несколько позже, а сейчас создадим несколько вычислимых полей DataWindow. Например, выведем сумму зарплаты по всем сотрудникам. Для этого оттяните вниз ограничитель "Summary", выберите в пункте меню "Insert", подпункте "Control" пункт "Compute Field" и щелкните мышью под столбцом "Salary" в области "Summary". Откроется окно построения выражений (рис. 6). Рис. 6 В списке "Functions" выберите выражение подсуммовки "sum( #x for all )", а за тем, выделив "#x" замените его на "salary" либо в ручную, с клавиатуры, либо щелкнув по имени этого поля в списке "Columns" и нажмите "Ок". После этого в области просмотра мы видим, что под столбцом с суммами зарплат сотрудников появилось поле, отображающее сумму всех зарплат - 3151.2. Эта сумма вычисляется динамически, т.е. если добавить в таблицу еще одного сотрудника, то сумма всех зарплат увеличится на сумму зарплаты нового сотрудника. Теперь добавим не функциональный, чисто визуальный, но, иногда, очень необходимый
компонент - указатель строки. Для этого выберите в пункте меню "Insert", подпункте "Control"
пункт "Compute Field" и щелкните мышью на столбце "id" (именно на столбце, а не на
заголовке!). Столбцы данных сдвинутся, первым столбцом станет добавленный "Compute Field" и вновь
откроется окно построения выражений. Внесите в него следующую строку: После нажатия кнопки "Ок", в области просмотра, в первом столбце текущей строки всегда будет находиться стрелочка (рис. 7). Рис. 7 DataWindow хорошо еще и тем, что позволяет просто и удобно настраивать внешний вид в зависимости от данных. Большинство интерфейсных характеристик DataWindow, как, например, размер шрифта, цвет текста и фона, подчеркивания, а также запрет на изменение данных, реализуются также без написания кода, с помощью внутренних механизмов DataWindow, которые называются "выражения" (expressions). Описывать все возможные параметры, управлять которыми можно с помощью выражений тоже нет никакой возможности - их много и далеко не все они часто используются. Опишем наиболее часто встречающиеся характеристики и задачи.
Для установки expressions на какое либо свойства поля или столбца, нужно выделить этот столбец, щелкнув по нему один раз левой кнопкой мыши, за тем в области свойств найти необходимое свойство и вызвать окно построения выражений (рис. 6) нажав кнопку слева от поля свойства. Красный цвет кнопки означает, что выражение свойству еще не назначено. Если кнопка зеленого цвета , это значит, что выражение уже есть, и нажав на нее, это выражение можно изменить или удалить. Мы показали только наиболее часто встречающиеся выражения для изменения визуальных свойств DataWindow. Пробуйте, смотрите и вы сможете сделать очень много. И при этом - ни строчки кода пока нами написано не было! Важным компонентом DataWindow является DDDW - Drop Down DataWindow
- выпадающее DataWindow. Этот механизм позволяет легко отображать связанные данные. Пример: есть 2
таблицы - общие данные и детализация. В таблице с общими данными содержатся только коды (первичные
ключи) данных детализации. Надо отобразить данные, чтобы не показывать кодов. Можно, конечно, построить
сложный SQL запрос, выбирающий данные из нескольких таблиц, но тогда нетривиальной становится задача
сохранения изменений обратно в БД. С этой задачей гораздо более успешно справится механизм DDDW.
Сохраните данные и закройте БД. Итак, в новой таблице мы имеем список должностей занимаемых сотрудниками. Построим DataWindow стиля Grid по этой таблице. Думаю, вы сможете справиться с этим самостоятельно. Результат показан на рис. 8. Рис. 8 Во второй панели инструментов нажмите кнопку с надписью "SQL" чтобы перейти в
редактор SQL-запроса. В редакторе, в нижней части окна, выберите закладку "Compute" и внесите в пустую
строку следующий запрос: Вернитесь в DataWindow. Итак, мы видим, что добавилась еще одна колонка, содержащая фамилии сотрудников. В нашем случае, т.к. мы используем Microsoft Access, я, например, не знаю, как в дополнительном запросе получить более одного поля. Синтаксис пригодный для MS SQL Server (select first_name + " " + second_name + " " + family from sotr where sotr.id = shtat.sotr_id) MS Access не принимает. Но мне хотелось бы видеть в этом DataWindow не только фамилии сотрудников, но и их инициалы и оклады. В этом случае нам поможет DDDW - Drop Down DataWindow. Для этого построим еще одно DataWindow стиля Grid, или просто сделаем копию первого (для этого откройте "dw_1" и с помощью команды "Save As" в меню "File" сохраните его под именем "dw_3"). Уберем из него все поля (из визуальной части, а не из запроса). Для этого по очереди щелкните мышкой по каждому полю, и нажмите на клавиатуре кнопку "Delete". Кстати говоря, это еще одно замечательное свойство DataWindow. Если нам не нужно отображать для пользователя тот или иной столбец, то мы просто удаляем его из визуальной части, при этом столбец продолжает участвовать в SQL-запросе и мы можем получить доступ к данным, хранящимся в этом столбце. Теперь добавим Compute field с таким выражением: first_name + " " + left( second_name, 1) + ". " + left( family, 1) + "., оклад " + salary + "р" Закроем dw_3 и вернемся к dw_2. Щелкните на столбце "sotr_id" чтобы выделить его, перейдите на закладку "Edit" панели свойств и установите следующие значения свойств столбца:
Сохраните сделанные изменения и посмотрите на область просмотра. В столбце "sotr id" вместо ничего не говорящих цифр появилась вполне говорящая информация (рис. 9). Более того, сотрудников на должностях можно менять местами, т.к. они содержатся в выпадающем списке! Рис. 9 Для того, чтобы запретить смену сотрудников на должностях, достаточно установить свойство "protected" столбца в 1. Итак, DDDW это по сути, DataWindow внутри DataWindow. Уровень вложенности при этом может быть только 1, то есть не может быть DataWindow в DataWindow и еще раз в DataWindow. DDDW имеет несколько (как правило, 2) столбцов, один из которых связан со столбцом другой таблицы. Для того, чтобы использовать DDDW надо изменить вид редактирования столбца на DDDW, выбрать DataWindow, которое будет представлять собой DDDW и правильно определить столбцы, какой из них - data column, а какой - display column. Data column - столбец данных - определяет, что будет подменяться в основном DataWindow. Если каких-либо значений из основного DataWindow не будет в data column DDDW, то будут отображаться данные основного DataWindow Display column - отображаемый столбец - определяет, чем будет заменено в основном DataWindow значение из соответствующего столбца данных. Необходимо отметить, что реальной подмены данных не происходит - меняется только ОТОБРАЖАЕМОЕ значение. Это, однако, делает DataWindow более "читабельным" и, в то же время, сохраняет простоту сохранения данных обратно в БД, поскольку основное DataWindow строится по ОДНОЙ таблице, а не по нескольким. В следующей главе мы познакомимся с DataWindow control и тем, как работать с DataWindow из кода приложения.
Последнее обновление: 11.08.2016 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(c)2002-2024 Ikar Ikar Home Center ICQ: 167220388 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
На сайте могут быть опубликованы рекламные материалы и ссылки. Всю ответственность за содержание рекламных материалов, текстов ссылок и контент рекламируемых сайтов несет рекламодатель. |