J'ai plusieurs sous-rapports et tous ces sous-états sont contenus dans des bandes séparées.Comment renvoyer des valeurs du sous-rapport pour masquer des bandes vides?
Par exemple:
...
<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>
...
...
Si le sous-état ne contient des éléments, je voudrais cacher l'élément band
.
J'ai ajouté la variable SUB_REPORT_ROW_CNT
au sous-rapport et l'ai liée à la variable REPORT_COUNT
, qui contient le nombre de lignes dans le rapport (dans le sous-rapport dans ce cas).
<variable name="SUB_REPORT_ROW_CNT" class="java.lang.Integer" resetType="Report" calculation="Nothing">
<variableExpression><![CDATA[$V{REPORT_COUNT}]]></variableExpression>
</variable>
Dans tous les groupes du rapport maître-je ajouté ce qui suit:
<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>
Mais l'expression $V{SUB_REPORT_ROW_CNT} != 0
est toujours évaluée comme false
.
Et si j'imprime la valeur d'une variable en utilisant le bloc suivant, j'obtiens toujours un 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>
Quelle pourrait être l'erreur? .. Comment retourner les valeurs de sous-état cacher les bandes vides? ..
Je serais très reconnaissant pour l'information. Merci à tous.
Où spécifier 'evaluationTime =" Band "' dans ce cas? ... –
Comment supprimer le sous-rapport si aucun enregistrement https://stackoverflow.com/q/34682494/5292302 –
Merci beaucoup pour votre commentaire ! Je vais essayer de le faire. –