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

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. А значит мы можем выяснить пуст ли источник еще до начала построения страницы отчета.

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

.NET FastReport .NET FastReport
26 октября 2026

TfrImageComboBox: выпадающий список с изображениями и текстовыми подписями в FastReport VCL

TfrImageComboBox из FastEditors VCL: выпадающий список с иконками и подписями для FastReport VCL. Свойства, события и примеры использования в Delphi.
26 октября 2026

Прогресс-бар в Delphi: компоненты TfrProgressBar и TfrxProgressBar из FastReport VCL

Разбираем компоненты TfrProgressBar и TfrxProgressBar из FastReport VCL: настройка шкалы прогресса, пороги и маркеры, привязка к данным и пример на Delphi.
23 октября 2026

FastGrid изнутри: объект View, колонки и события компонента сетки Delphi

Внутреннее устройство FastGrid: объект View, свойство Appearance, колонки, события и режимы работы с данными DB и Unbound в Delphi. Разбор на примере демо-проекта GridDemo.dpr.

Не является публичной офертой
© 1998-2026 ООО «Быстрые отчеты»