如果column为null,则DynamicReports删除行

时间:2016-07-01 07:46:35

标签: java jasper-reports dynamic-reports

我有点陷入这么容易的问题。我正在使用DynamicReports,如果列值为null,我想隐藏整行。据我所知,DynamicReports基于JasperReports,可以通过检查TextField的选项" 删除行空白"来实现这一点。我怎么能在Dynamic中做到这一点?

我使用的组件:

TextColumnBuilder, ColumnGroupBuilder, JasperReportBuilder

如果我的任何TextColumns都为null,我想隐藏整行。

1 个答案:

答案 0 :(得分:1)

好的,经过一番思考,我发现这个问题可以通过其他方式解决。

我们将使用列,组等属性setPrintWhenExpression(DRIExpression expression)

1。创建类,它将处理,打印或不打印行。 Dynamic有这样的抽象类:

    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,允许我根据其他列状态打印(或不打印)列。

2. 将属性添加到

专栏:

setPrintWhenExpression(DRIExpression expression)

群组:

.setPrintSubtotalsWhenExpression(DRIExpression expression)

setFooterPrintWhenExpression(DRIExpression expression)

setHeaderPrintWhenExpression(DRIExpression expression)

取决于你想隐藏的内容。

示例:

我们的报告中有两列:Product和ProductCount列。如果ProductCount为null,我想隐藏Product列(我们没有此产品的信息)。

所以,为此,我会将属性PrintWhenExpression添加到产品列

TextColumnBuilder<String> productColumn = col.column("Product", "Product", type.stringType())
.setPrintWhenExpression(new ShowExpressionDynamicReports("ProductCount"));