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

adi*_*dis 31 datasource report jasper-reports subreport ireport

我正在使用JasperReports并填写JRDataSource其他报告.现在,我想将main传递REPORT_DATA_SOURCE给子报表.我怎样才能做到这一点?

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

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

Ale*_*x K 37

您可以通过内置参数传递数据源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>
Run Code Online (Sandbox Code Playgroud)

您可以根据变量,参数或字段创建新的数据源实例.

例子:

<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>
Run Code Online (Sandbox Code Playgroud)

另一个样本:

<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>
Run Code Online (Sandbox Code Playgroud)

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

<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>
Run Code Online (Sandbox Code Playgroud)

注意: 使用相同的(有主报告)数据源报表可能会导致失去第一行的效应报表.你可以阅读为什么我的子报告中缺少第一条记录?发布以了解如何避免此问题.

  • [为什么我的子报告中缺少第一条记录](http://community.jaspersoft.com/wiki/why-first-record-missing-my-subreport) 无需登录即可再次使用。 (2认同)