Перехват событий Report Viewer

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

Помимо разнообразных полезных свойств и методов, библиотека Report Viewer также содержит большое количество событий, позволяющих вам перехватывать щелчки на кнопках, циклы обработки отчета и попытки перехода на более высокий уровень детализации. Эти события могут использоваться для изменения поведения Report Viewer, для выполнения некоторого вспомогательного кода при “срабатывании” определенных событий или для изменения содержимого отчета во время его просмотра.

В справочном файле CrystalDevHelp. СНМ имеется отдельный раздел, посвященный программированию Report Viewer. Там вы найдете исчерпывающую информацию о том, какие события доступны для использования в коде. Вы также можете для этого воспользоваться браузером Object Browser или просто открыть для объекта Report Viewer окно редактирования кода и просмотреть выпадающий список процедур, расположенный в правом верхнем углу этого окна (рис. 25.18).

Перехват событий Report Viewer

Перехватывая события, происходящие во время обработки отчета и во время работы пользователя с Report Viewer, вы получаете широкие возможности для настройки своего приложения. В приложении Xtreme Orders продемонстрировано только три простых примера. Если пользователь щелкает в Report Viewer на кнопке Help, появляется окно с сообщением Custom Help Goes Неге (Здесь находится пользовательская справка). Когда пользователь дважды щелкает на группе, чтобы просмотреть более подробные сведения по ней, появляется окно с приглашением подтвердить намерение увеличить уровень детализации. Если пользователь подтвердит выбор (то есть щелкнет на кнопке Yes), детализация будет выполнена. Если пользователь ответит отрицательно (щелкнет на кнопке No), детализация будет отменена. А после того, как пользователь просмотрит подробные сведения и щелкнет в окне Report Viewer на кнопке закрытия окна (небольшая кнопка с изображением символа X), появится еще одно окно с запросом подтверждения закрытия данного окна. Так же, как и при попытке увеличить уровень детализации, вкладка детализации будет закрыта только в случае положительного ответа пользователя. В противном случае событие будет отменено.

Одним из наиболее сложных моментов в этих примерах является определение того, какая из групп будет использоваться при попытке отобразить или закрыть вкладку детализации. С этим вопросом обязательно нужно разобраться, поскольку перехват событий будет мало что означать, если вы не сможете определить группу, с которой связано данное событие. Событие DrillOnGroup объекта Report Viewer облегчает эту задачу, передавая в функцию события параметр GroupNameList. Этот массив, в котором отсчет ведется от нуля, содержит элемент для каждой “развернутой” до этого группы; текущая “разворачиваемая” на данный момент группа идет самой последней в этом массиве.

Если отчет имеет только один уровень группирования (как отчет в приложении Xtreme Orders), GroupNameList всегда будет содержать только элемент 0 — развернутую группу Однако если в отчете присутствует несколько уровней группирования, у вас появится дополнительное преимущество: вы сможете определить, насколько глубоко и какие группы содержатся в группе, разворачиваемой на данный момент. Например, если отчет имеет три уровня группирования — Country (Страна), State (Штат) и City (Город) — пользователь может сначала развернуть группу Canada (Канада). В результате будет инициировано событие DrillDownGroup, а массив GroupNameList будет содержать только нулевой элемент, в данном случае — Canada. Затем на вкладке детализации группы Canada пользователь может дважды щелкнуть на группе ВС. Снова будет инициировано событие DrillOnGroup, и теперь массив GroupNameList будет содержать уже два элемента: Canada в элементе 0 и ВС в элементе 1. Далее, если пользователь во вкладке детализации группы ВС дважды щелкнет на группе Vancouver (Ванкувер), опять “сработает” событие DrillOnGroup, и массив GroupNameList будет содержать уже три элемента — Canada, ВС и Vancouver.

Если вас интересует только нижний уровень группирования, вызовите последний элемент массива GroupNameList, воспользовавшись VB-функцией UBound. Несмотря на то что отчет Xtreme Orders содержит только один уровень группирования (и поэтому всегда позволяет использовать GroupNameList (0) для определения группы), в нем все равно использовалась функция Ubound для поддержания совместимости с верхними уровнями.

Другим аргументом, передаваемым событию DrillOnGroup, является UseDefaults. Его булевское значение можно использовать в событии, чтобы определить, действительно ли происходит развертывание группы. Если значение равно True (оставить неизмененным), группа будет развернута. Если значение внутри события DrillOnGroup равно False, развертывание будет отменено, и в окне Report Viewer не будет отображаться вкладка детализации для группы.

Ниже показан фрагмент кода, взятый из приложения Xtreme Orders. Обратите внимание на то, что имя разворачиваемой группы включается в окно сообщения и что результаты этого окна определяют, будет ли для этой группы отображаться вкладка детализации:

Private Sub CRViewerl_DrillOnGroup(GroupNameList As Variant, _

ByVal DrillType As CrystalActiveXReportViewerLibllCtl.CRDrillType,_ UseDefault As Boolean)

If MsgBox("Are you sure you want to drill down on '" & _

GroupNameList(UBound(GroupNameList)) & _

vbQuestion + vbYesNo, "Xtreme Orders Report") = vbNo Then UseDefault = False End If 'MsgBox("Are you sure you want to drill down.

End Sub
Обработка ошибок
Другие свойства и методы RDC
Метод DiscardSavedData
Работа с базой данных SQL

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


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