При создании отчета хочется сделать его максимально «дружелюбным» для потребителя. Перегруженность данными и элементами оформления ухудшает восприятие информации. Поэтому многие хотели бы избавиться от пустых колонок в таблицах, при отсутствии в них данных. Генератор отчетов FastReport.Net позволяет реализовать такой функционал. Как вы понимаете, нужно скрыть не только колонку, но и заголовок для нее. Если сокрытие колонки дело пары кликов мышью, то сокрытие заголовка задача не тривиальная.
Допустим у нас есть таблица, из которой мы хотим вывести данные в отчете. Но некоторые данные могут отсутствовать или быть равными нулю. В этом случае, мы можем использовать инструмент «Условное выделение» для сокрытия ячеек с нулевыми данными. Выбираем нужную ячейку и кликаем по иконке на панели инструментов:
При добавлении условия, по умолчанию создается проверка на ноль. То, что нам нужно. Мы лишь выбираем опции отображения. В нашем случае убираем флаг visible:
Итак, с помощью этих не хитрых манипуляций мы добились сокрытия ячеек с нулевыми ячейками. Но это не решает всех проблем. Наша задача скрыть колонку целиком, вместе с заголовком, если в ней нет ни одного значения больше нуля. Пустота колонки будет проверяться на каждой выводимой странице.
Чтобы проверить, что на странице в заданной колонке нет данных, мы воспользуемся итогом.
Этот итог подводится по заданной колонке и суммирует все значения в ней. Если итог равен нулю, значит в колонке нет ни одного значения больше нуля, и нужно скрыть заголовок колонки.
Итак. Добавим итог:
Итог поместим в бэнд «Подвал страницы»:
После этого итог можно скрыть с помощью свойства visible.
Теперь зададим логику для скрытия заголовка последней колонки. Вместо текста RUB вводим выражение:
[IIf([Total]!=0,Text14.Text = "RUB",Text14.Text = "")]
Однако, это еще не все. Так как итог формируется уже после отображения заголовка и данных на странице, то на момент выполнения выражения, которое мы ввели выше, значение итога не актуально. Поэтому нам нужно использовать опцию отложенного вычисления выражения в заголовке колонки и двойной проход по отчету.
Выберите текстовое поле с заголовком колонки RUB. В свойствах текстового поля находим ProcessAt и изменяем на PageFinished:
После этого, открываем свойства отчета и устанавливаем опцию Doublepass:
Эта опция позволяет построить отчет дважды. При первом построении будут вычислены все итоги, а при втором – этими итогами можно воспользоваться в заголовках. Все это нужно, потому что отчет строится поэлементно последовательно. То есть при построении очередного элемента, изменить предыдущий уже не получится. Поэтому нужно повторное построение, в котором будут учтены результаты последующих элементов.
Посмотрим, как работает наш отчет в условия, когда в колонке RUB все данные равны 0:
На каких-то страницах данные могут появиться, и тогда колонка появится:
Таким образом мы можем динамически отображать или скрывать колонки, в зависимости от данных.