ОК, после некоторых мыслей, я обнаружил, что эта проблема может быть решена по-другому.
мы будем использовать столбец, группу и т.д. свойство setPrintWhenExpression(DRIExpression expression)
1. Создать класс, который будет обрабатывать, печатать или не печатать строку. Динамический имеет абстрактный класс для этого:
public class ShowExpressionDynamicReports extends AbstractSimpleExpression<Boolean> {
private String fieldName;
public ShowExpressionDynamicReports(String fieldName) {
this.fieldName = fieldName;
}
@Override
public Boolean evaluate(net.sf.dynamicreports.report.definition.ReportParameters reportParameters) {
return reportParameters.getValue(fieldName) != null;
}
}
Вы должны расширить AbstractSimpleExpression для того, чтобы передать его в качестве параметра для методов, которые перечислены ниже.
Итак, значение столбца печатается, если evaluate(ReportParameters rp)
возвращает true.
Я также добавил поле fieldName
, которое позволяет мне печатать (или нет) колонку из-за other's состояние столбца.
2. Добавить объект в столбце
:
setPrintWhenExpression(DRIExpression expression)
Группа:
.setPrintSubtotalsWhenExpression(DRIExpression expression)
или
setFooterPrintWhenExpression(DRIExpression expression)
или
setHeaderPrintWhenExpression(DRIExpression expression)
Зависит от того, что вы хотите скрыть.
Пример:
У нас есть 2 колонки в нашем отчете: Продукт и столбцы ProductCount. Я хотел бы скрыть столбец Product, если ProductCount имеет значение null (у нас нет информации для этого продукта).
Таким образом, чтобы сделать это я добавлю свойство PrintWhenExpression
в колонке продукта
TextColumnBuilder<String> productColumn = col.column("Product", "Product", type.stringType())
.setPrintWhenExpression(new ShowExpressionDynamicReports("ProductCount"));