2013-10-22 71 views
0

在我的報告中目前有2個子報表,我們稱它們爲AB
A列出了現金頭寸,而B列出了股票。
我從基於web的Java環境運行此報告,JasperReports的報告從sql數據庫讀取。子報表訂單排序

我想將一個參數傳遞給JR報告,告訴它按照什麼順序排列子報表,在這種情況下用於例如(B第一,然後A或反之亦然)。

有沒有辦法做到這一點?

回答

1

您應該發送一個布爾類型的參數。同時生成報告。在該參數的基礎上,您應該定義子報表的路徑。 這裏是subrepor path.e.g.的jrxml代碼。

對於第一子報表:

<subreport> 
      <reportElement uuid="8dba7f58-0466-4504-9d51-7484786450d2" positionType="Float" x="0" y="16" width="315" height="16"/>    
      <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{listOfObject})]]></dataSourceExpression> 
      <subreportExpression><![CDATA[$P{swap} == true ? "/path/to/first/subreport" : /path/to/second/subreport]]></subreportExpression> 
     </subreport> 

而對於第二子報表:

<subreport> 
     <reportElement uuid="8dba7f58-0466-4504-9d51-7484786450d2" positionType="Float" x="0" y="16" width="315" height="16"/>    
     <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{listOfObject})]]></dataSourceExpression> 
     <subreportExpression><![CDATA[$P{swap} == true ? "/path/to/second/subreport" : /path/to/first/subreport]]></subreportExpression> 
    </subreport> 

而在其他case.I反之亦然沒有測試。請看一看。

享受。

+0

謝謝你的幫助。 – Sil

+0

現在要從這個例子走向現實 - 有一個X數量的子報表(假設我有10個 - 現金,股票,期貨等),所以來自數據庫的參數不僅是訂單的子報告,但也顯示哪些。 - 因此數據可能是B,D,A(運行報告2,然後是4,然後是1 ..除外)。有沒有辦法做到這一點? – Sil

+1

如果您有超過2個子報表,並且您想根據您的選擇管理它們,那麼您應該使用動態碧玉。 – user1791574

0

您可以使用更復雜的subreportExpression和「打印時的表達式」。 在第一組報表打印時,在第二

$P{NUM_OF_SUBS} <= 2 ? true : false 

$P{NUM_OF_SUBS} <= 1 ? true : false 

等等 以及在第一報表類似subreportExpression:

$P{SUBS}.split(",")[1] == "A" 
    ? "repo:subA.jrxml" 
    : $P{SUBS}.split(",")[1] == "B" 
     ? "repo:subB.jrxml" 
     : $P{SUBS}.split(",")[1] == "C" 
     ? "repo:subC.jrxml" 
     : "repo:subD.jrxml" 

和第二:

$P{SUBS}.split(",")[2] == "A" 
    ? "repo:subA.jrxml" 
    : $P{SUBS}.split(",")[2] == "B" 
     ? "repo:subB.jrxml" 
     : $P{SUBS}.split(",")[2] == "C" 
     ? "repo:subC.jrxml" 
     : "repo:subD.jrxml" 

etc ...

+0

謝謝。我清楚地看到這指向只有一個子報表循環訪問數組,並且每次都執行檢查並調用子報表(儘可能多地存儲數組中的值)是可能的嗎? – Sil

+0

如果將subReport元素置於詳細信息中它會渲染從數據源讀取的每一行,並且你可以使用字段而不是參數來確定顯示哪個子報表。 –

+0

是的。但它不會遍歷數組。 – Sil