gpt4 book ai didi

jasper-reports - 如何将主报表数据源传递给子报表(JasperReports)?

转载 作者:行者123 更新时间:2023-12-03 08:57:07 24 4
gpt4 key购买 nike

我正在使用 JasperReports 并填写 JRDataSource为他们的报告。
现在,我想通过主 REPORT_DATA_SOURCE到子报表。我怎样才能做到这一点?

据我所知REPORT_DATA_SOURCE是消耗品,所以只能使用一次吧?我可以复制这个数据源并传递它吗?

顺便说一句:我使用 iReport 来创建布局。

最佳答案

您可以通过内置的 传递数据源REPORT_DATA_SOURCE 范围。

这个例子:

<subreport>
<reportElement x="261" y="25" width="200" height="100"/>
<dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "subreport.jasper"]]></subreportExpression>
</subreport>

您可以基于变量、参数或字段创建数据源的新实例。

sample :

<variable name="HeadingsCollection" class="java.util.Collection" calculation="System">
<initialValueExpression><![CDATA[new java.util.ArrayList()]]></initialValueExpression>
</variable>
...
<subreport>
<reportElement x="0" y="0" width="515" height="20"/>
<subreportParameter name="ReportTitle">
<subreportParameterExpression><![CDATA[$P{ReportTitle}]]></subreportParameterExpression>
</subreportParameter>
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($V{HeadingsCollection})]]></dataSourceExpression>
<subreportExpression class="java.lang.String"><![CDATA["HeadingsReport.jasper"]]></subreportExpression>
</subreport>

另一个示例:

<field name="cast" class="java.util.Collection"/>
...
<subreport>
<reportElement positionType="Float" x="15" y="25" width="245" height="20" isRemoveLineWhenBlank="true" backcolor="#99CCFF"/>
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{cast})]]></dataSourceExpression>
<subreportExpression class="java.lang.String"><![CDATA["JRMDbCastSubreport.jasper"]]></subreportExpression>
</subreport>

或者您可以通过参数传递数据源:

<parameter name="SubreportDataSource" class="net.sf.jasperreports.engine.JRDataSource"/>
...
<subreport>
<reportElement positionType="Float" x="15" y="25" width="245" height="20" isRemoveLineWhenBlank="true"/>
<dataSourceExpression>$P{SubreportDataSource}</dataSourceExpression>
<subreportExpression class="java.lang.String"><![CDATA["Subreport.jasper"]]></subreportExpression>
</subreport>

注:
在子报表中使用相同(与主报表)数据源可能会导致丢失子报表中的第一行。您可以阅读 Why is the first record missing from my subreport?发布以了解如何避免此问题。

关于jasper-reports - 如何将主报表数据源传递给子报表(JasperReports)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8490563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com