2017-08-29 2 views
0

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.

+0

Où spécifier 'evaluationTime =" Band "' dans ce cas? ... –

+1

Comment supprimer le sous-rapport si aucun enregistrement https://stackoverflow.com/q/34682494/5292302 –

+0

Merci beaucoup pour votre commentaire ! Je vais essayer de le faire. –

Répondre

1

Je suggère d'utiliser vos paramètres déjà existants au lieu d'utiliser une variable, qui le rend inutilement compliqué

printWhenExpression de la bande que vous voulez cacher:

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

ou

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

Bien sûr, vous devez transmettre ces paramètres avec la valeur NULL s'il n'y a pas d'entrées pour le sous-rapport afin de masquer le ba sd Cela fonctionne pour moi et est une solution vraiment facile.

+0

Merci beaucoup pour votre réponse! Excellente idée, je vais essayer de vous le faire savoir ... –

+0

Ok génial! Faites-moi savoir si vous faites face à un problème – Yannick

+1

Résolu de la même manière - J'ai ajouté les valeurs de chaîne pour chaque département, par exemple: '' Alors je fais la même vérification: ''. –