Источники данных не всегда содержат данные. И при построении отчетов, даже если источник данных пуст, страница будет создана, хотя бы с заголовками.
На форумах генераторов отчетов можно встретить вопросы пользователей о том, как скрыть пустые страницы:
“Подскажите пожалуйста, как пропустить (не печатать) пустую страницу, если DataBand на ней не содержит данных.”
Например, разработчики генератора отчетов Stimulsoft Reports предлагают скрывать страницу с помощью инструмента Conditions. Установив условие на проверку количества записей в источнике можно указать опцию отображения компонента страницы. Хорошее решение, достаточно простое.
Тема статьи актуальна для любого генератора отчетов, поэтому давайте рассмотрим, как это сделать в FastReport.NET
Бэнд с данными имеет свойство PrintIfDatasourceEmpty, которое по умолчанию имеет значение false. Это означает, что бэнд не будет отображаться, если данных в нем нет. Но страница по-прежнему будет показываться пользователю, так как она содержит заголовки данных, или заголовок страницы. Поэтому, нам нужно написать простейший скрипт, который скроет страницу, если бэнд с данным пуст.
Можно пойти двумя путями:
1) Проверить пустоту источника данных в бэнде с данными. Для этого используем событие StartPage страницы отчета:
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 для объекта отчета:
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. А значит мы можем выяснить пуст ли источник еще до начала построения страницы отчета.
Таким образом, мы рассмотрели способ скрыть страницу при отсутствии данных в источнике.