Событие Format

Оценить
(0 голоса)

Еще одним существенным преимуществом, которое только RDC предоставляет разработчикам, является событие Format. Это событие инициируется всякий раз, когда начинается обработка того или иного отдельного раздела отчета. Для примера представим, как проходит процесс обработки первой страницы отчета. Сначала производится “подготовка” всего отчета, затем выводится заголовок страницы и далее, по порядку — заголовок отчета (поскольку это первая страница отчета), заголовок первой группы, все разделы подробностей в этой группе, нижний колонтитул первой группы и так далее. Всякий раз, когда начинает печататься какой-нибудь из этих разделов (даже в период “подготовки” отчета), инициируется соответствующее событие Format.

Вы можете перехватывать эти события форматирования и изменять поведение раздела или объектов внутри этого раздела, что позволяет пользоваться всеми функциональными возможностями Visual Basic, когда дело доходит до условного форматирования или форматирования разделов.

Совет. Хотя эти события Forma t автоматически добавляются, когда вы используете встроенный в RDC конструктор ActiveX, вы можете сами добавлять их также и тогда, когда интегрируете внешние файлы .RPT в RDC. Это можно сделать, объявив переменную типа Section с помощью ключевого VB-кода wi thEvents. Например, следующий фрагмент кода позволит вам использовать событие Forma t с внешним отчетом:

Dim WithEvents detailSection As CRAXDRT.Section

Чтобы добавить код для какого-нибудь события Format, просто дважды щелкните на нужном разделе в окне проектирования RDC. Появится окно для редактирования кода, отображающее событие Format для раздела, на котором вы щелкнули. Вы также можете щелкнуть правой кнопкой мыши на конструкторе в окне проводника Project Explorer (в Visual Basic) и в контекстном меню выбрать пункт View Code (Показать код). В любом случае все разделы отчета будут отображаться в выпадающем списке объектов в левом верхнем углу окна для редактирования кода. Единственной доступной процедурой для каждого раздела отчета является Format: она будет отображаться в выпадающем списке процедур в правом верхнем углу (рис. 25.14).

Чтобы управлять отображением и форматированием разделов и объектов или содержимым текстовых объектов во время форматирования отчета, можно использовать все возможности Visual Basic. Вы можете написать код Visual Basic, чтобы организовать способ форматирования поля в текущем форматируемом разделе (например, для определения цвета фона или шрифта объекта). Можно также изменить форматирование всего раздела, как показано в следующем фрагменте кода из приложения Xtreme Orders:

Private Sub Details_Format (ByVal pFormattinglnfo As Object)

If Val(frmXtremeOrders.txtHighlight) > 0 And _

Report.fldOrderAmount.Value > Val(frmXtremeOrders.txtHighlight) Then Report.Details.BackColor = &HFFFF00

End If 'Report.fldOrderAmount > Val(txtHighlight).

End Sub

Совет. Аргумент pFormattinglnfo, передаваемый в модуль — это объект, имеющий свойства только для чтения, которые возвращают логическое значение True или False: IsEndOfGroup, IsStartOfGroup и IsRepeatedGroupHeader. Считывая содержимое этих свойств, вы можете определять дальнейший ход обработки события Forma t.

Рис. 25.14. Выбор процедуры в выпадающем списке

Этот код содержится в событии Format для раздела подробностей (обратите внимание на то, что этому разделу отчета было присвоено новое имя Details вместо имени, которое было присвоено ему по умолчанию — Section 6). Каждый раз, когда начинается форматирование раздела подробностей, инициируется это событие. В это время текстовое поле Highlight в форме Print Xtreme Orders проверяется на наличие значения. Если пользователь ввел значение и значение поля базы данных f ldOrderAmount больше, чем значение, которое ввел пользователь, для раздела подробностей устанавливается цвет фона. Эта логика заменяет поля параметров и условное форматирование, используемые во многих других подобных ситуациях с отчетом.

Очевидно, что во время события Format могут иметь место многие другие более сложные варианты форматирования. Чаще всего во время этого события поля формул в отчете заменяются текстовыми объектами, и используется метод SetText для изменения содержимого текстовых объектов. По сути дела, это событие дает возможность использовать практически все возможности языка Visual Basic в отношении объектов, добавляемых в отчет.

Для обработки отчетов у RDC доступны и другие события. Не только вы сами можете перехватывать событие Format для каждого раздела отчета, но и объект Report способен инициировать цекоторые события, среди которых особый интерес представляет событие No Data. Взгляните на следующий фрагмент кода:

Private Sub Report_NoData(pCancel As Boolean)

MsgBox "There is no data in this report. " & _

"Supply different selection criteria" pCancel = True

End Sub

Если на момент начала обработки отчета в нем не окажется данных, генерируется событие No Data. Вы можете перехватить это событие и выполнить другие действия. В частности, присвоив параметру pCancel значение True, вы можете отменить обработку оставшейся части отчета. Следует, однако, убедиться, что отмена обработки отчета не приведет к исчезновению с экрана окна Report Viewer — для этого потребуется добавить,

Событие Format

например, глобальную переменную, чтобы указать, что в этом событии не нужно отображать окно Report Viewer.

В документации по RDC можно найти ссылки на “Formatting Idle” или другие ссылки на время обработки. Некоторые свойства объектов можно определять только в определенный момент во время выполнения обработки. Об этом необходимо помнить при написании кода в событии Format. Если вы хотите определить свойство, которое не может быть определено в данный момент во время обработки, вы столкнетесь либо с сообщениями об ошибках, либо получите непредсказуемые результаты. Информацию о режимах форматирования можно найти в оперативной справочной системе, в разделе “Format Event” (“Событие Format”).

Внимание! События форматирования могут срабатывать гораздо чаще, чем вы ожидаете, из-за множества проходов, которые Crystal Reports должен выполнить по мере обработки отчета. Это может происходить тогда, например, когда RDC встречает в конце страницы опцию Keep Toge the г для раздела. Если вы напишете код для накапливания значений в событии Forma t без учета этих проходов, то полученный результат будет неточным. RDC включает функциональную возможность под названием Report Variables (Переменные отчета), которая позволяет отслеживать проходы отчета. Если вместо собственных переменных вы используете переменные отчета, то накапливание значений будет происходить только тогда, когда в раздел отчета на самом деле будет внесено какое-нибудь “логическое” изменение. Более подробную информацию об этом можно найти в оперативной справочной системе, в разделе “Report Variables”.

 

Выбор пункта назначения вывода
Изменение источника данных во время выполнения
Несвязанные поля
Перехват событий Report Viewer
End Sub

Добавить комментарий


Защитный код
Обновить