Уважаемый посетитель!
Так как в Вашем браузере запрещено использование JavaScript для web-страниц, меню сайта Вам не доступно.
Для навигации по сайту используйте пожалуйста карту сайта.

Сделать стартовой Добавить в избранное Обратная связь

партнеры

SQL.RU

Детский Дворик - Портал детских фотографий

ГавГав.Инфо - портал для собаководов-любителей и профессиональных кинологов

информация

реклама

Скачать RAR архив. 31Kb
« Глава 4 Оглавление Глава 6 »

Глава 5
Продолжаем учить теорию, но и про практику не забываем. DataWindow, часть 1

Итак, что же такое DataWindow? DataWindow является одной из главных особенностей PowerBuilder. Оно позволяет организовать доступ к данным и их визуализацию практически без написания кода. Можно сказать, что DataWindow - сердце PowerBuilder, его основа. Без DataWindow PowerBuilder был бы просто одним из многих средств RAD, причем хуже своих собратьев. Наличие DataWindow выводит PowerBuilder на первое место среди средств RAD при создании пользовательских интерфейсов приложений БД.

Существует 2 типа объектов, представляющих DataWindow:

  • DataWindow object
  • DataWindow control
DataWindow object - объект доступа к данным и их визуального представления. Именно он определяет, какие данные будут выбраны из БД, и каким образом они будут представлены.
DataWindow control - объект пользовательского интерфейса, через который происходит работа пользователя с данными и доступ к возможностям DataWindow object.

DataWindow в значительной степени облегчает построение именно ИНТЕРФЕЙСА пользователя к данным, позволяя производить оформление данных, практически не прибегая к написанию кода. Для этого в DataWindow существует механизм выражений (expressions), о которых будет подробно рассказано ниже.

Итак, DataWindow - это объект доступа и отображения данных из БД. Рассмотрим его более подробно. Для начала познакомимся с первой частью DataWindow - DataWindow object.

Стили и источники

По стилю представления данных DataWindow различаются на 11 видов:

  1. Tabular - табличный стиль представления, который отображает заголовки столбцов в верхней части и наполнение столбцов строго под ними.
  2. Grid - сеточный стиль. Сеточный стиль очень похож на стиль Tabular, но он добавляет отображение сетки (вертикальных и горизонтальных линий). Он выглядит и работает примерно так же, как редакторы электронных таблиц (например, Microsoft Excel и т.п.).
  3. Group - групповой стиль представления. Этот стиль позволяет отображать информацию, сгруппированную по определенному признаку (столбцу), выводя группировочную информацию в виде подзаголовка над сеточным представлением сгруппированных данных.
  4. Freeform - стиль свободного представления данных. Применяется для редактирования детализированных данных в одной строке. В этом стиле заголовки столбцов отображаются не над столбцами данных, а в любом месте всего поля строки DataWindow.
  5. Label - этикеточный стиль. Этот стиль представления не заменим при печати этикеток, меток, ценников и т.д. PowerBuilder поддерживает множество различных типов этикеток и форм, которые позволяют изменять высоту и ширину каждой этикетки, количество этикеток в вертикальном и горизонтальном направлении, тип этикеточной бумаги, расстояние между этикетками и многие другие параметры.
  6. N-Up - колоночный стиль представления. Колоночный стиль позволяет отображать данные в двух и более колонках на странице, как, например, в газете или телефонном справочнике. Однако, не смотря на то, что данные можно отображать в виде колонок, они должны читаться слева на право по столбцам, а не вдоль этих столбцов. Так как большинство людей, видя колонки, читает всю информацию в первой колонке, а потом переходит ко второй и т.д., то колоночный стиль представления данных не очень широко используется на практике.
  7. Crosstab - стиль представления с перекрестными ссылками. Этот стиль весьма распространен в случае предоставления информации в аналитических целях. Характерной чертой стиля с перекрестными ссылками является возможность суммировать данные не только по столбцу, но и по строке. Простейшим примером этого стиля представления можно назвать отчет по продаже товара, где в строках предоставляется позиция товарного ассортимента, а в столбцах суммы продаж этой позиции за определенные периоды времени. В таком отчете в крайнем правом столбце можно получить сумму продаж позиции товара за все периоды времени, а в последней строке - суммы продаж по всем позициям товара за каждый отдельный период времени.
  8. Graph - графический стиль представления информации. Этот стиль обеспечивает возможность построения широкого спектра различных типов графиков и диаграмм (как 2D, так и 3D).
  9. Composite - стиль составного представления. Этот стиль позволяет скомпоновать представления данных из нескольких связанных DataWindow других типов, связанных между собой.
  10. Rich text - стиль представления расширенного текста. Этот стиль позволяет отображать и редактировать данные в имитации текстового редактора, но не позволяет сохранять в БД сделанные изменения. По этому стиль расширенного текста очень удобен для построения отчетов, редактируемых пользователем. Он позволяет использовать практически весь спектр возможностей текстового редактора, например, форматирование абзацев, переносы, верхние и нижние колонтитулы и т.д.
  11. OLE 2.0 - стиль компонента OLE позволяет встраивать в приложение такие OLE-объекты, как документы Microsoft Word, электронные таблицы Microsoft Excel и т.п.

По источникам DataWindow разделяются на 5 способов построения:
  1. Quick Select - построение на основе создаваемого SQL-запроса с помощью мастера запросов.
  2. SQL Select - построение на основе создаваемого SQL-запроса в графическом или синтаксном режиме.
  3. Query - построение на основе заранее приготовленного (построенного) SQL-запроса.
  4. Stored Procedure - построение на основе хранимой процедуры сервера БД.
  5. External - построение на основе "внешнего", задаваемого вручную набора данных.

В этом списке есть один интересный пункт. Это external DataWindow. Этот вид позволяет организовать ПРОИЗВОЛЬНЫЕ данные в один набор и работать с ним, как с одним набором. Этот набор данных необязательно является данными из БД, он формируется произвольно. Зачем это нужно? Это нужно для того, чтобы при построении отображения произвольных данных можно было использовать всю мощь DataWindow.

Создание простейшего DataWindow

Для создания DataWindow нам потребуется тестовая база данных, состоящая из нескольких таблиц. На мой взгляд, для этой цели лучше всего подойдет небольшая база MS Access. Давайте создадим ее. Создайте на диске "С:" в папке "Project", которую мы создавали для нашей первой программы, папку "DataWindow". В этой папке создайте файл базы данных MS Access с именем "DW_Test.mdb". Откройте его с помощью MS Access и создайте таблицу "sotr", состоящую из следующих полей:

п.п. Имя поля Тип данных Длина Дополнительно
1 id счетчик   "ключевое" поле
2 first_name текстовый 50  
3 second_name текстовый 50  
4 family текстовый 50  
5 salary числовой Двойное с плавающей точкой 2 знака после запятой
Сохраните таблицу, перейдите в режим таблицы и добавьте в нее четыре строки:
id first_name second_name family salary
1 Иванов Иван Иванович 1000.00
2 Петров Петр Петрович 900.50
3 Сидоров Сидор Сидорович 550.70
4 Васечкин Василий Васильевич 700.00

На основе этого источника ODBC создайте профиль PowerBuilder (рис. 1) и соединитесь с ним. Теперь можно создавать DataWindow. Для этого выберите в меню "File" пункт "New", на мастере создания объектов перейдите на закладку "DataWindow", выберите стиль представления "Grid" и нажмите кнопку "Ок" (рис. 2).


Рис. 1

Рис. 2

После этого откроется диалог выбора источника. Выберите "SQL Select" и нажмите "Далее". Откроется окно SQL Query Painter и диалог выбора таблиц (рис. 3). Выберите в нем единственную, пока, таблицу "Sotr" и нажмите "Open".


Рис. 3

Рис. 4

PowerBuilder откроет представление таблицы и позволит выбрать поля, участвующие в запросе (рис. 4). Выберите все поля и кликните на последнюю иконку во второй панели инструментов для окончания построения запроса и возврата в мастер построения DataWindow. На последнем шаге мастера можно установить дополнительные свойства DataWindow, такие как, например, цвет фона, цвета шрифта и стиль заголовков и столбцов. Нажмите кнопку "Далее", а за тем кнопку "Ок". Поздравляю, Вы только что создали DataWindow! Его внешний вид показан на рис. 5.


Рис. 5


Сохраним его под именем "dw_1".

Итак, мы построили простое DataWindow. Как правило, простейшие 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" и вновь откроется окно построения выражений. Внесите в него следующую строку:

if(GetRow() = CurrentRow(),char(216),"")

После нажатия кнопки "Ок", в области просмотра, в первом столбце текущей строки всегда будет находиться стрелочка (рис. 7).


Рис. 7

DataWindow хорошо еще и тем, что позволяет просто и удобно настраивать внешний вид в зависимости от данных. Большинство интерфейсных характеристик DataWindow, как, например, размер шрифта, цвет текста и фона, подчеркивания, а также запрет на изменение данных, реализуются также без написания кода, с помощью внутренних механизмов DataWindow, которые называются "выражения" (expressions). Описывать все возможные параметры, управлять которыми можно с помощью выражений тоже нет никакой возможности - их много и далеко не все они часто используются. Опишем наиболее часто встречающиеся характеристики и задачи.

  1. Часто бывает, что какие-либо данные нельзя давать редактировать. Для запрета редактирования существует свойство protect у столбца данных. Достаточно изменить его на 1 и данные будут закрыты. Но это простой пример. Вот более сложный. Надо закрыть от редактирования те данные, которые были считаны из БД, при этом добавление данных должно работать, то есть при добавлении строки, данные в ней можно редактировать до сохранения их в БД. Это также реализуется свойством protect, но в него записывается выражение вида if(IsRowNew(),0,1).
  2. По умолчанию в DataWindow нет указателя текущей строки. Предположим, что есть DataWindow, которое только отображает данные, то есть во всех столбцах стоит protect = 1. При навигации по такому DataWindow мы не будем видеть, в какой строке мы находимся. Давайте будем выделять текущую строку, ну, например, подчеркиванием. Находим свойство Font.Underline и запишем в него выражение: if(GetRow() = CurrentRow(),1,0). Вуаля - мы имеем подчеркивание. Если скопировать выражение для всех колонок строки, то в каждой колонке данные ТЕКУЩЕЙ строки будут подчеркнуты. При этом мы не написали ни строчки скрипта. Для удобства программиста в PowerBuilder есть конструктор выражений DataWindow, который вызывается кнопкой справа от соответствующего свойства.
  3. Выделение цветом. Допустим, нам надо выделить строки с определенным значением поля. Для этого для каждого столбца зададим выражение для текста или для фона. Выражение имеет следующий вид: if(<поле>=<значение>),rgb(<цвет при выполнении условия>),rgb(<цвет при не выполнении условия>).

Для установки expressions на какое либо свойства поля или столбца, нужно выделить этот столбец, щелкнув по нему один раз левой кнопкой мыши, за тем в области свойств найти необходимое свойство и вызвать окно построения выражений (рис. 6) нажав кнопку слева от поля свойства. Красный цвет кнопки означает, что выражение свойству еще не назначено. Если кнопка зеленого цвета , это значит, что выражение уже есть, и нажав на нее, это выражение можно изменить или удалить.

Мы показали только наиболее часто встречающиеся выражения для изменения визуальных свойств DataWindow. Пробуйте, смотрите и вы сможете сделать очень много. И при этом - ни строчки кода пока нами написано не было!

DDDW - что это такое и как его использовать

Важным компонентом DataWindow является DDDW - Drop Down DataWindow - выпадающее DataWindow. Этот механизм позволяет легко отображать связанные данные. Пример: есть 2 таблицы - общие данные и детализация. В таблице с общими данными содержатся только коды (первичные ключи) данных детализации. Надо отобразить данные, чтобы не показывать кодов. Можно, конечно, построить сложный SQL запрос, выбирающий данные из нескольких таблиц, но тогда нетривиальной становится задача сохранения изменений обратно в БД. С этой задачей гораздо более успешно справится механизм DDDW.

Давайте посмотрим эту ситуацию на примере. Для этого добавим в нашу БД еще одну таблицу "shtat":

п.п. Имя поля Тип данных Длина Дополнительно
1 id счетчик   "ключевое" поле
2 dolsn текстовый 50  
3 sotr_id числовой Длинное целое Число десятичных знаков 0
4 office текстовый 50  
5 phone текстовый 11  
Сохраните таблицу, перейдите в режим таблицы и добавьте в нее четыре строки:
id dolsn sotr_id office phone
1 Менеджер 3 Вспомогательный 80951129264
2 Менеджер 2 Основной 80953381692
3 Бухгалтер 4 Вспомогательный 80951129217
4 Директор 1 Основной 80953382730

Сохраните данные и закройте БД. Итак, в новой таблице мы имеем список должностей занимаемых сотрудниками. Построим DataWindow стиля Grid по этой таблице. Думаю, вы сможете справиться с этим самостоятельно. Результат показан на рис. 8.


Рис. 8

Во второй панели инструментов нажмите кнопку с надписью "SQL" чтобы перейти в редактор SQL-запроса. В редакторе, в нижней части окна, выберите закладку "Compute" и внесите в пустую строку следующий запрос:

(select first_name from sotr where sotr.id = shtat.sotr_id)

Вернитесь в 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" панели свойств и установите следующие значения свойств столбца:
  • Style Type - DropDownDW
  • DataWindow - dw_3
  • Display column - compute_1
  • Data Column - id

Сохраните сделанные изменения и посмотрите на область просмотра. В столбце "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 из кода приложения.

10 мая 2004 г.

IKAR,
Программист-разработчик
PowerBuilder.
Ikar Home Center
GSS,
Программист-разработчик
PowerBuilder.
gss_work@zmail.ru



Последнее обновление: 11.08.2016
реклама
ссылки


Продвижение сайтов

Биржа ссылок

статистика

Яндекс цитирования

(c)2002-2024 Ikar
Ikar Home Center
ICQ: 167220388
На сайте могут быть опубликованы рекламные материалы и ссылки. Всю ответственность за содержание рекламных материалов, текстов ссылок и контент рекламируемых сайтов несет рекламодатель.
hosted on pets-tree
.