我有点陷入这么容易的问题。我正在使用DynamicReports,如果列值为null,我想隐藏整行。据我所知,DynamicReports基于JasperReports,可以通过检查TextField的选项" 删除行空白"来实现这一点。我怎么能在Dynamic中做到这一点?
我使用的组件:
TextColumnBuilder, ColumnGroupBuilder, JasperReportBuilder
如果我的任何TextColumns都为null,我想隐藏整行。
答案 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"));