1

我有一个包含表格的报告。我想根据支持该表的查询的结果集隐藏该表的列。例如,以下是其中一列的 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

4

2 回答 2

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);
于 2013-06-07T10:01:32.270 回答
0

对于未来的读者

你应该使用这个
<printWhenExpression><![CDATA[$F{Total1_header} != null]]></printWhenExpression>

代替
<printWhenExpression>$F{Total1_header} != null</printWhenExpression>

于 2018-03-20T02:12:53.107 回答