我有点被这样一个简单的问题困扰。我正在使用DynamicReports,并且如果列值为null,我想隐藏整行。据我所知,DynamicReports是基于JasperReports的,可以通过检查TextField的选项“空白时删除行”来实现。如何在Dynamic中做到这一点?

我使用的组件:

TextColumnBuilder, ColumnGroupBuilder, JasperReportBuilder


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

最佳答案

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

我们将使用列,组等属性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)

取决于您要隐藏的内容。

例:

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

因此,为此,我将在产品列中添加属性PrintWhenExpression

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

07-26 03:01