Как скрыть страницу отчета, если на ней нет данных

18.06.2020

Источники данных не всегда содержат данные. И при построении отчетов, даже если источник данных пуст, страница будет создана, хотя бы с заголовками.

На форумах генераторов отчетов можно встретить вопросы пользователей о том, как скрыть пустые страницы:

“Подскажите пожалуйста, как пропустить (не печатать) пустую страницу, если DataBand на ней не содержит данных.”

Например, разработчики генератора отчетов Stimulsoft Reports предлагают скрывать страницу с помощью инструмента Conditions. Установив условие на проверку количества записей в источнике можно указать опцию отображения компонента страницы. Хорошее решение, достаточно простое.

Тема статьи актуальна для любого генератора отчетов, поэтому давайте рассмотрим, как это сделать в FastReport.NET

Бэнд с данными имеет свойство PrintIfDatasourceEmpty, которое по умолчанию имеет значение false. Это означает, что бэнд не будет отображаться, если данных в нем нет. Но страница по-прежнему будет показываться пользователю, так как она содержит заголовки данных, или заголовок страницы. Поэтому, нам нужно написать простейший скрипт, который скроет страницу, если бэнд с данным пуст.

Можно пойти двумя путями:

1)      Проверить пустоту источника данных в бэнде с данными. Для этого используем событие StartPage страницы отчета:

 Create event StartPage for the Report page

1
2
3
4
5
private void Page2_StartPage(object sender, EventArgs e)
 {
 if (Data2.DataSource.RowCount == 0)
 Page2.Visible = false;
 }

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

2)      Второй способ не требует двойного прохода по отчету. Нужно лишь добавить обработчик события StartReport для объекта отчета:

Create event StartReport for the Report object

1
2
3
4
5
6
7
8
 private void _StartReport(object sender, EventArgs e)
 {
 DataSourceBase ds = Report.GetDataSource("Category");
 if (!ds.HasMoreRows)
 {
 Page2.Visible = false;
 }
 }

В этом случае мы проверяем непосредственно источник данных отчета, таблицу Category. А значит мы можем выяснить пуст ли источник еще до начала построения страницы отчета.

Таким образом, мы рассмотрели способ скрыть страницу при отсутствии данных в источнике.

20 ноября 2024

Локализация и смена языков в FastReport VCL

FastReport VCL поддерживает 40 языков для локализации интерфейса и позволяет изменять язык на лету через меню или код, без перекомпиляции.
1 ноября 2024

Новые возможности редактора отчетов FastReport VCL

Рассматриваем новые возможности редактора отчетов: выносные линии, подсветка пересекающихся объектов, обновлённые деревья отчетов и данных.
30 октября 2024

Использование стилей при создании отчетов в FastReport VCL

В статье подробно рассматривается одна из новых возможностей FastReport VCL – применение стилей и страниц стилей.