简体   繁体   English

如何通过主报表的参数将结果集传递到子报表?

[英]How to pass resultset to the subreport via master report's parameter?

I'm new to JasperReports . 我是JasperReports的新手。

I have a result set that was passed as a parameter to the main report. 我有一个结果集,该结果集已作为参数传递给主报表。 From the main report I need to pass it as a datasource to my subreport . 从主报表中,我需要将其作为数据源传递到子报表

param = super.getParam(param, "MY_RESULT_SET", resultSet);
JasperPrint jasperPrint = JasperFillManager.fillReport("myJasper.jasper", param, dataSource);

The snippet from myJasper.jrxml : myJasper.jrxml中的代码段:

<parameter name="MY_RESULT_SET" class="java.sql.ResultSet"/>
<subreport>
    <reportElement x="285" y="0" width="270" height="20"/>              
    <dataSourceExpression><![CDATA[$P{MY_RESULT_SET}]]></dataSourceExpression>
    <subreportExpression><![CDATA["mySubreport.jasper"]]></subreportExpression>
</subreport>

On doing as above I get the below Exception 在执行上述操作时,出现以下异常

java.lang.ClassCastException: com.mysql.jdbc.JDBC4ResultSet cannot be cast to net.sf.jasperreports.engine.JRDataSource
at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluateSubreport(JRFillSubreport.java:356)
at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluate(JRFillSubreport.java:275)
at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:257)
at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:473)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2021)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:755)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:265)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:128)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:836)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:765)
at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:84)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:624)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:540)

Can anyone please guide me? 谁能指导我?

You need to construct a JRResultSetDataSource and pass that instead. 您需要构造一个JRResultSetDataSource并将其传递。 This should be as simple as adding: 这应该像添加一样简单:

JRDataSource myResultSetDS = new JRResultSetDataSource(resultSet)

Then pass myResultSetDS as the parameter instead of resultSet itself. 然后将myResultSetDS作为参数而不是resultSet本身传递。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM