我正在尝试启动我在iReport中创建的报告,其中包含主报告和子报告。在iReport中,子报表启动正常并包含数据,但是当我尝试从我的java代码中启动它时,子报表是空白的。
到目前为止我做了什么:
我在主报表中有一个名为“SUBREPORT”的String参数,用于定义子报表的路径。例如。值:“E:\ java \ ReportLauncher \ reports \ test_subreport1.jasper”
主报表中的子报表表达式设置为:$ P {SUBREPORT}
子报表连接表达式为:$ P {REPORT_CONNECTION}
我还定义了一个名为“INVOICE_NUMBER”的子报表参数,该参数设置为$ F {InviInvNo},映射到主报表中的字段。
在我的java代码中,我有:
HashMap<String, Object> paramHash = new HashMap();
paramHash.put("INVOICE_NUMBER", invoiceID);
paramHash.put("REPORT_CONNECTION", this.conn);
paramHash.put("SUBREPORT", subReportPath);
JasperPrint jasperprint = JasperFillManager.fillReport(this.reportPath, paramHash, this.conn);
主报告已正确创建并已填充。然而,子报告区域是空白的。对我做错了什么的想法?
提前致谢, 安迪。
答案 0 :(得分:1)
由于您未提及有关子报表查询的任何内容:
如果您在子报表中使用详细信息区域,那么您将需要报表的数据查询。
在旧的iReport中,从Data
菜单中选择Report Query
并在此处写下您的查询。如果只需要一个记录(即只有一次详细信息带),则可以使用虚拟表。喜欢:
SELECT 'a' FROM DUMMY
否则,如果您不想使用细节带,则可以选择在不使用查询的情况下查看其他带。从Edit
菜单中选择Report Properties
,在More...
标签下,将标记When no data
设置为All Sections, no detail