我的主要报告中有一份子报告.
如果子报表没有返回任何行,我需要隐藏文本.
我试图获取子报表的记录数在主报表中添加一个新变量并将其设置为return values属性中的目标变量subreport(for rount_count),但是当我运行主报表时,变量的值为null
计算子报表中的记录
在主报告中定义变量
<variable name="subReportCount" class="java.lang.Integer"/>
Run Code Online (Sandbox Code Playgroud)调用子报表时,将return参数设置为您的变量
<subreport>
<reportElement x="100" y="20" width="400" height="20" uuid="a7a89ebb-54d4-4b6e-8c9f-c107e8a40bbb"/>
<dataSourceExpression><![CDATA[... your datasource ...]]></dataSourceExpression>
<returnValue subreportVariable="REPORT_COUNT" toVariable="subReportCount"/>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "Your_subreport.jasper"]]></subreportExpression>
</subreport>
Run Code Online (Sandbox Code Playgroud)此变量现在可以在a中使用textField,但是您需要小心,因为textField需要在正确的时间进行评估(在子报表执行之后).
该属性textField是evaluateTime
例
<textField evaluationTime="Report" pattern="###0">
<reportElement positionType="Float" x="300" y="60" width="200" height="20" uuid="125aa2d0-3d4e-4377-bed1-b4531c9142c9"/>
<textElement textAlignment="Right" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$V{subReportCount}]]></textFieldExpression>
</textField>
Run Code Online (Sandbox Code Playgroud)
评估时间:
自动评估时间,表示参与表达式的每个变量应在引擎决定的时间进行评估.
Band元素将在band结束时进行评估.
Column一个常量,指定在填充每列后应计算表达式.
组一个常量,指定在每个组中断后应计算表达式.
主用于在主报告结束时评估的元素.
现在是一个常量,指定在遇到填充过程的精确时刻应该计算表达式.
Page一个常量,指定在填充每个页面后应评估表达式.
Report一个常量,指定应在填充过程结束时计算表达式.
一般在使用子报表时
evalutationTime="Band"evalutationTime="Report"