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

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

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

2 сентября 2024

Обзор облачного решения для создания и управления отчетами

МоиОтчеты Облако — это мощное облачное решение для создания и управления отчетами, обеспечивающее широкий спектр возможностей, от создания документов в различных форматах до интеграции с корпоративными системами.
12 августа 2024

Как собрать и установить плагин Postgres в FastReport .NET

В этой статье описывается подключение к базе посредством плагина FastReport .NET для дизайнера отчетов из Visual Studio через NuGet-сервер.
8 августа 2024

Как установить FastReport .NET и его компоненты в Windows

Пошаговая инструкция по онлайн и ручной установке через регистрационный код FastReport .NET и его компонентов в Windows.