2017-08-29 6 views
0

いくつかのサブレポートがあり、これらのサブレポートはすべて別々のバンドに含まれています。例えば空のバンドを隠すためにサブレポートから値を返す方法は?

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

?..

私は情報のために非常に感謝されます。ありがとうございます。

+0

ここで 'evaluationTime =" Band "'を指定する場所... –

+1

レコードがない場合、サブレポートを削除する関連する方法https://stackoverflow.com/q/34682494/5292302 –

+0

ありがとう!やってみる。 –

答えて

1

私は非表示にしたいバンドのそれは不必要に複雑

printWhenExpression作ること、代わりに変数を使用してのあなたの既存のパラメータを使用することをお勧め:

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

または

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

サブレポートがbaを非表示にするエントリがない場合は、もちろん、このパラメータを値としてNULLに渡す必要がありますnd。それは私のために働く、本当に簡単な解決策です。

+0

ありがとうございました!素晴らしいアイデアは、私はあなたに知らせるようにしようとします... –

+0

大丈夫です!あなたが問題に直面したら教えてください – Yannick

+1

同様の方法で解決されました - 私は各部門の文字列の値を追加しました。例えば: 'それから同じチェック: '<![CDATA [$ P {departmentATitle}!= null]]>' –

関連する問題