我有一份包含表格的报告。我想根据支持表的查询的结果集隐藏该表的列。例如,以下是其中一列的XML:
<jr:column width="80">
<printWhenExpression>$F{Total1_header} != null</printWhenExpression>
<jr:columnHeader height="30" rowSpan="1">
<textField isStretchWithOverflow="true" isBlankWhenNull="true">
<reportElement x="0" y="0" width="80" height="30" style="table_CH"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression>$F{Total1_header}</textFieldExpression>
</textField>
</jr:columnHeader>
<jr:detailCell style="table_TD" height="20" rowSpan="1">
<textField isStretchWithOverflow="true" isBlankWhenNull="true">
<reportElement x="0" y="0" width="80" height="20"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression>$F{Total1}</textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
出于某种原因,我的报告抱怨 printWhenExpression 。它声称$F{Total1_header}
不存在。但是,它不会抱怨 textFieldExpression 中$F{Total1_header}
的实例。
我无法弄清楚为什么该字段可用于 textFieldExpression ,而不是 printWhenExpression 。
答案 0 :(得分:0)
列具有'列打印时'属性以通过表达式隐藏/显示列。
删除列的另一种方法是在运行时修改jasper设计,然后报告编译,然后按常规处理。此方法可以将未使用的宽度分配给剩余的列。
粗略地这样:
JasperDesign design = ...
JRDesignComponentElement tableElement = (JRDesignComponentElement) design.getTitle().getElementByKey(tableKey);
StandardTable tableComponent = (StandardTable) tableElement.getComponent();
col = tableComponent.getColumns().get(0);
tableComponent.removeColumn(col);
// Then compile the JasperDesign
JasperReport result=JasperCompileManager.compileReport(design);
答案 1 :(得分:0)
对于未来的读者
你应该使用这个
<printWhenExpression><![CDATA[$F{Total1_header} != null]]></printWhenExpression>
<printWhenExpression>$F{Total1_header} != null</printWhenExpression>