Visual Basic 6. Руководство разработчика

       

Использование конструктора


ActiveX DataReport

Имеется еще одна важная операция, выполняемая при создании приложений для работы с базами данных - генерация отчетов. Генерация иерархических отчетов с вычислением итогов (например, отчетов для данных, возвращаемых иерархией объектов Command, созданных в предыдущем параграфе) и их распечатка - одна из основных задач разработчика. Понятно, что хотелось бы работать с утилитой, которая генерирует для нас отчеты только с помощью мыши и позволяет корректно их распечатывать. Второй конструктор ActiveX в Visual Basic 6 — DataReport Designer — предназначен именно для этого. Посмотрим, как конструктор DataReport создает отчет, основанный на иерархии объектов Command. Выполните следующие действия.

1. Сделайте активным проект Report и дважды щелкните на DataReport Designer в окне проводника проекта, чтобы открыть его. На экране появится шаблон отчета, который не соответствует созданной структуре иерархии объектов Command.

2. Откройте окно DataReport, чтобы подключить объект DataReport к объекту Command 1.

3. В окне Properties найдите свойства DataSource и DataMember и установите их в DataEnvironment 1 и Command-1 соответственно.

4. Щелкните правой кнопкой на объекте DataReport 1 и из контекстного меню выберите команду Retrieve Structure.

Структура иерархии объектов Command отобразится на объекте DataReport (рис. 18.11).

Использование конструктора

Рис. 18.11. Объект DataReport после чтения структуры объектов Commandl

Полученный шаблон содержит отчет и заголовок страницы. Затем следуют заголовки двух групп для объектов Command 1 и Command2. Как видно, деталями отчета являются поля объекта Commands. После секции Detail следуют соответству­ющие нижние колонтитулы.

Оставьте заголовок отчета (Report header) пустым (позже можно поместить в него любые строки) и выполните следующие действия.

1. Чтобы удалить место, в котором обычно размещается Report header (даже если он пуст), щелкните на серой панели под секцией Report header (панель Page header), чтобы выделить ее.

2. Перемещайте указатель у верхней части панели, пока он не примет форму двойной стрелки.


3. Нажмите кнопку мыши и переместите панель Page header вверх, чтобы удалить зазор между панелями.

Примечание

Секция Page header содержит номера страниц (и, возможно, другие пункты).

4. Чтобы показать в этом заголовке номер текущей страницы, щелкните правой кнопкой мыши в области Page header (пустое место под панелью с заголовком "Page Header").

5. Из контекстного меню выберите пункт Insert Control, чтобы открыть следующее подменю (рис. 18.12).

Использование конструктора


Рис. 18.12. Элементы управления, добавляемые в объект Report

6. Добавьте элемент управления Label, а затем - элемент управления Current Page Number.

На рис. 18.13 показан объект Report на последней стадии разработки. Можете использовать этот рисунок в качестве руководства в процессе конструирования вашего отчета.

Элемент управления Label, добавленный в отчет, напоминает стандартный элемент управления Label. Называется он rptLabel,

и у него не так много свойств, как у обычного элемента управления Label. Но их достаточно для того, чтобы определить его внешний вид в отчете. Можно перемещать его с помощью мыши, изменять размер и задавать основные свойства (Font и Caption), используя окно Properties. Это справедливо и для элемента управления Current Page Number. Можно задавать его свойства Font, ForeColor и Caption. По умолчанию Caption установлен в %р — специ­альное значение, указывающее Visual Basic подставить номер текущей страницы.

Использование конструктора


Рис. 18.13. Проектирование отчета с помощью конструктора DataReport (окончательный вид отчета показан на рис. 18.14)

Первый заголовок группы (Group Header), соответствует полям объекта Command 1. Очевидно, что здесь необходимо поместить название компании (контактное имя и номер телефона) или другое поле, уникальное для каждого заказчика. Здесь же находятся итоговые поля TotalOrders и CustomerTotal.

Выполните следующие действия.

1. Поместите два больших элемента управления Label в область первого заголовка группы и установите их заголовки соответственно в Total Orders и Customer Total.



2. Откройте конструктор DataEnvironment1 и перетащите поля TotalOrders и CustomerTotal, расположенные под объектом Command 1, к двум элементам Label на первом заголовке группы. Выберите подходящий шрифт и выровняйте их.

Следующий заголовок соответствует объекту Command2. Этот объект содержит идентификаторы счетов (поле OrderID) и их итоги (поле OrderTotal). Разместите эти два поля в области второго заголовка группы. Переместите соответствующие поля под объектом Command2 в конструкторе DataEnvironmentI в область второго заголовка.

Если хотите печатать заголовки столбцов для этих двух полей, то поместите их в предыдущий заголовок группы (иначе они будут появляться перед каждым счетом). Разместите два других элемента управления Label и установите их заголовки соответственно в "Order ID" и "Order Total" (см. рис. 18.13).

Перейдем к секции Detail (Детали). Здесь должны быть поля объекта Command3 (этот объект использовался для вычисления итогов), но пока поля объекта Commands нас не интересуют. Поэтому в нашем отчете не будет секции Detail. Второй заголовок группы представляет собой суть секции Detail отчета (эта ситуация достаточно типична при разработке отчетов). Чтобы поэкспериментировать с секцией Detail, поместите в нее подробные сведения о счетах.

Установите высоту секции Detail в 0, передвинув разделитель этой секции вверх. В этом примере мы не используем нижние колонтитулы, но их можно настроить так же, как и заголовки. Вообще, можно поместить любой элемент управления, используя меню Insert, и манипулировать его свойствами с помощью окна Properties.

Чтобы вывести отчет на экран, вызовите метод Show объекта DataReportl. Разместите на форме командную кнопку, назовите ее Report

и введите код обра­ботчика ее события Click.

Private Sub Command1_Click()

DataReport1.Show

End Sub

Запустите проект снова, нажмите кнопку Report и вы увидите разработанный отчет в отдельном окне на экране (рис. 18.14). Две кнопки вверху окна DataReport позволяют распечатать его на любом принтере или экспортировать его в текстовый формат или формат HTML. Практически, конструктор DataReport сделал всю работу. Наиболее важный аспект этого процесса состоит в том, что распечатка отчета создавалась без написания какого-либо кода.

Использование конструктора


Рис. 18.14. Окончательный вид отчета сгенерирован конструктором ActiveX DataReport


Содержание раздела