如何从子报表中 return 值来隐藏空带?
How to return values from subreport to hide empty bands?
我有几个子报表,所有这些子报表都包含在不同的区域中。
例如:
...
<detail>
<band height="500">
<subreport>
<reportElement isPrintRepeatedValues="false" x="-10" y="0" width="325" height="1" isRemoveLineWhenBlank="true" backcolor="#ffcc99"/>
<dataSourceExpression><![CDATA[$P{DepartmentASubReportData}]]></dataSourceExpression>
<subreportExpression class="net.sf.jasperreports.engine.JasperReport">
<![CDATA[$P{DepartmentASubReport}]]></subreportExpression>
</subreport>
<break type="Page">
<reportElement x="-10" y="1" width="325" height="1" key="element-1"/>
</break>
</band>
<band height="500">
<subreport>
<reportElement isPrintRepeatedValues="false" x="-10" y="1" width="325" height="1" isRemoveLineWhenBlank="true" backcolor="#ffcc99"/>
<dataSourceExpression><![CDATA[$P{DepartmentBSubReportData}]]></dataSourceExpression>
<subreportExpression class="net.sf.jasperreports.engine.JasperReport">
<![CDATA[$P{DepartmentBSubReport}]]></subreportExpression>
</subreport>
<break type="Page">
<reportElement x="-10" y="1" width="325" height="1" key="element-2"/>
</break>
</band>
<band height="500">
<subreport>
<reportElement isPrintRepeatedValues="false" x="-10" y="1" width="325" height="1" isRemoveLineWhenBlank="true" backcolor="#ffcc99"/>
<dataSourceExpression><![CDATA[$P{DepartmentCSubReportData}]]></dataSourceExpression>
<subreportExpression class="net.sf.jasperreports.engine.JasperReport">
<![CDATA[$P{DepartmentCSubReport}]]></subreportExpression>
</subreport>
<break type="Page">
<reportElement x="-10" y="1" width="325" height="1" key="element-3"/>
</break>
</band>
...
...
如果子报表不包含元素,我想隐藏元素band
。
我将变量 SUB_REPORT_ROW_CNT
添加到子报表并将其链接到变量 REPORT_COUNT
,其中包含报表中的行数(在本例中为子报表)。
<variable name="SUB_REPORT_ROW_CNT" class="java.lang.Integer" resetType="Report" calculation="Nothing">
<variableExpression><![CDATA[$V{REPORT_COUNT}]]></variableExpression>
</variable>
在主报告的每个波段中,我添加了以下内容:
<band height="500">
<printWhenExpression><![CDATA[$V{SUB_REPORT_ROW_CNT} != 0]]></printWhenExpression>
<subreport>
<reportElement isPrintRepeatedValues="false" x="-10" y="1" width="325" height="1" isRemoveLineWhenBlank="true" backcolor="#ffcc99"/>
<dataSourceExpression><![CDATA[$P{DepartmentASubReportData}]]></dataSourceExpression>
<returnValue subreportVariable="SUB_REPORT_ROW_CNT" toVariable="SUB_REPORT_ROW_CNT"/>
<subreportExpression class="net.sf.jasperreports.engine.JasperReport">
<![CDATA[$P{DepartmentASubReport}]]></subreportExpression>
</subreport>
<break type="Page">
<reportElement x="-10" y="1" width="325" height="1" key="element-2"/>
</break>
</band>
但是表达式 $V{SUB_REPORT_ROW_CNT} != 0
总是计算为 false
。
如果我使用下一个块打印变量的值,我总是得到 null
。
<textField>
<reportElement x="8" y="40" width="540" height="18" />
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$V{SUB_REPORT_ROW_CNT}]]></textFieldExpression>
</textField>
可能是什么错误?..如何 return 子报表中的值隐藏空带?..
如果能提供信息,我将不胜感激。感谢大家。
我建议使用您已经存在的参数而不是使用变量,这会使它变得不必要的复杂
printWhenExpression
您要隐藏的波段:
<band height="500">
<printWhenExpression><![CDATA[$P{DepartmentASubReportData} != null]]></printWhenExpression>
</band>
或
<band height="500">
<printWhenExpression><![CDATA[$P{DepartmentASubReport} != null]]></printWhenExpression>
</band>
当然,如果子报表没有条目以隐藏带区,则您需要将此参数作为值传递给 NULL
。这对我有用,是一个非常简单的解决方案。
我有几个子报表,所有这些子报表都包含在不同的区域中。
例如:
...
<detail>
<band height="500">
<subreport>
<reportElement isPrintRepeatedValues="false" x="-10" y="0" width="325" height="1" isRemoveLineWhenBlank="true" backcolor="#ffcc99"/>
<dataSourceExpression><![CDATA[$P{DepartmentASubReportData}]]></dataSourceExpression>
<subreportExpression class="net.sf.jasperreports.engine.JasperReport">
<![CDATA[$P{DepartmentASubReport}]]></subreportExpression>
</subreport>
<break type="Page">
<reportElement x="-10" y="1" width="325" height="1" key="element-1"/>
</break>
</band>
<band height="500">
<subreport>
<reportElement isPrintRepeatedValues="false" x="-10" y="1" width="325" height="1" isRemoveLineWhenBlank="true" backcolor="#ffcc99"/>
<dataSourceExpression><![CDATA[$P{DepartmentBSubReportData}]]></dataSourceExpression>
<subreportExpression class="net.sf.jasperreports.engine.JasperReport">
<![CDATA[$P{DepartmentBSubReport}]]></subreportExpression>
</subreport>
<break type="Page">
<reportElement x="-10" y="1" width="325" height="1" key="element-2"/>
</break>
</band>
<band height="500">
<subreport>
<reportElement isPrintRepeatedValues="false" x="-10" y="1" width="325" height="1" isRemoveLineWhenBlank="true" backcolor="#ffcc99"/>
<dataSourceExpression><![CDATA[$P{DepartmentCSubReportData}]]></dataSourceExpression>
<subreportExpression class="net.sf.jasperreports.engine.JasperReport">
<![CDATA[$P{DepartmentCSubReport}]]></subreportExpression>
</subreport>
<break type="Page">
<reportElement x="-10" y="1" width="325" height="1" key="element-3"/>
</break>
</band>
...
...
如果子报表不包含元素,我想隐藏元素band
。
我将变量 SUB_REPORT_ROW_CNT
添加到子报表并将其链接到变量 REPORT_COUNT
,其中包含报表中的行数(在本例中为子报表)。
<variable name="SUB_REPORT_ROW_CNT" class="java.lang.Integer" resetType="Report" calculation="Nothing">
<variableExpression><![CDATA[$V{REPORT_COUNT}]]></variableExpression>
</variable>
在主报告的每个波段中,我添加了以下内容:
<band height="500">
<printWhenExpression><![CDATA[$V{SUB_REPORT_ROW_CNT} != 0]]></printWhenExpression>
<subreport>
<reportElement isPrintRepeatedValues="false" x="-10" y="1" width="325" height="1" isRemoveLineWhenBlank="true" backcolor="#ffcc99"/>
<dataSourceExpression><![CDATA[$P{DepartmentASubReportData}]]></dataSourceExpression>
<returnValue subreportVariable="SUB_REPORT_ROW_CNT" toVariable="SUB_REPORT_ROW_CNT"/>
<subreportExpression class="net.sf.jasperreports.engine.JasperReport">
<![CDATA[$P{DepartmentASubReport}]]></subreportExpression>
</subreport>
<break type="Page">
<reportElement x="-10" y="1" width="325" height="1" key="element-2"/>
</break>
</band>
但是表达式 $V{SUB_REPORT_ROW_CNT} != 0
总是计算为 false
。
如果我使用下一个块打印变量的值,我总是得到 null
。
<textField>
<reportElement x="8" y="40" width="540" height="18" />
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$V{SUB_REPORT_ROW_CNT}]]></textFieldExpression>
</textField>
可能是什么错误?..如何 return 子报表中的值隐藏空带?..
如果能提供信息,我将不胜感激。感谢大家。
我建议使用您已经存在的参数而不是使用变量,这会使它变得不必要的复杂
printWhenExpression
您要隐藏的波段:
<band height="500">
<printWhenExpression><![CDATA[$P{DepartmentASubReportData} != null]]></printWhenExpression>
</band>
或
<band height="500">
<printWhenExpression><![CDATA[$P{DepartmentASubReport} != null]]></printWhenExpression>
</band>
当然,如果子报表没有条目以隐藏带区,则您需要将此参数作为值传递给 NULL
。这对我有用,是一个非常简单的解决方案。