我有点被这样一个简单的问题困扰。我正在使用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"));