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

07.04.2020

При создании отчета хочется сделать его максимально «дружелюбным» для потребителя. Перегруженность данными и элементами оформления ухудшает восприятие информации. Поэтому многие хотели бы избавиться от пустых колонок в таблицах, при отсутствии в них данных. Генератор отчетов FastReport.Net позволяет реализовать такой функционал. Как вы понимаете, нужно скрыть не только колонку, но и заголовок для нее. Если сокрытие колонки дело пары кликов мышью, то сокрытие заголовка задача не тривиальная.

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

 

При добавлении условия, по умолчанию создается проверка на ноль. То, что нам нужно. Мы лишь выбираем опции отображения. В нашем случае убираем флаг visible:

 

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

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

Этот итог подводится по заданной колонке и суммирует все значения в ней. Если итог равен нулю, значит в колонке нет ни одного значения больше нуля, и нужно скрыть заголовок колонки.

Итак. Добавим итог:

 

Итог поместим в бэнд «Подвал страницы»:

После этого итог можно скрыть с помощью свойства visible.

Теперь зададим логику для скрытия заголовка последней колонки. Вместо текста RUB вводим выражение:

[IIf([Total]!=0,Text14.Text = "RUB",Text14.Text = "")]

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

Выберите текстовое поле с заголовком колонки RUB. В свойствах текстового поля находим ProcessAt и изменяем на PageFinished:

 

После этого, открываем свойства отчета и устанавливаем опцию Doublepass:

 

Эта опция позволяет построить отчет дважды. При первом построении будут вычислены все итоги, а при втором – этими итогами можно воспользоваться в заголовках. Все это нужно, потому что отчет строится поэлементно последовательно. То есть при построении очередного элемента, изменить предыдущий уже не получится. Поэтому нужно повторное построение, в котором будут учтены результаты последующих элементов.

Посмотрим, как работает наш отчет в условия, когда в колонке RUB все данные равны 0:

 

На каких-то страницах данные могут появиться, и тогда колонка появится:

 

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

20 ноября 2024

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

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

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

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

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

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