如何从子报表返回值以隐藏空带?

时间:2017-08-29 15:44:46

标签: jasper-reports subreport

我有几个子报告,所有这些子报告都包含在不同的波段中。

例如:

...
<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>

可能是什么错误?..如何从子报表返回值来隐藏空带?..

我将非常感谢这些信息。谢谢大家。

1 个答案:

答案 0 :(得分:1)

我建议使用您现有的参数而不是使用变量,这会使其变得不必要复杂

要隐藏的乐队的

printWhenExpression

<band height="500"> 
    <printWhenExpression><![CDATA[$P{DepartmentASubReportData} != null]]></printWhenExpression>
</band>

<band height="500"> 
    <printWhenExpression><![CDATA[$P{DepartmentASubReport} != null]]></printWhenExpression>
</band>

当然,如果子报表没有条目隐藏波段,则需要将此参数作为值传递NULL。这对我有用,是一个非常简单的解决方案。