在我的報告中目前有2個子報表,我們稱它們爲A和B。
A列出了現金頭寸,而B列出了股票。
我從基於web的Java環境運行此報告,JasperReports的報告從sql數據庫讀取。子報表訂單排序
我想將一個參數傳遞給JR報告,告訴它按照什麼順序排列子報表,在這種情況下用於例如(B第一,然後A或反之亦然)。
有沒有辦法做到這一點?
在我的報告中目前有2個子報表,我們稱它們爲A和B。
A列出了現金頭寸,而B列出了股票。
我從基於web的Java環境運行此報告,JasperReports的報告從sql數據庫讀取。子報表訂單排序
我想將一個參數傳遞給JR報告,告訴它按照什麼順序排列子報表,在這種情況下用於例如(B第一,然後A或反之亦然)。
有沒有辦法做到這一點?
您應該發送一個布爾類型的參數。同時生成報告。在該參數的基礎上,您應該定義子報表的路徑。 這裏是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反之亦然沒有測試。請看一看。
享受。
您可以使用更復雜的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 ...
謝謝你的幫助。 – Sil
現在要從這個例子走向現實 - 有一個X數量的子報表(假設我有10個 - 現金,股票,期貨等),所以來自數據庫的參數不僅是訂單的子報告,但也顯示哪些。 - 因此數據可能是B,D,A(運行報告2,然後是4,然後是1 ..除外)。有沒有辦法做到這一點? – Sil
如果您有超過2個子報表,並且您想根據您的選擇管理它們,那麼您應該使用動態碧玉。 – user1791574