﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-raymanan</title><link>http://www.cppblog.com/raymanan/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 18 Apr 2026 06:35:58 GMT</lastBuildDate><pubDate>Sat, 18 Apr 2026 06:35:58 GMT</pubDate><ttl>60</ttl><item><title>关于Jasperreport的子报表设置</title><link>http://www.cppblog.com/raymanan/archive/2010/01/26/106479.html</link><dc:creator>raymanan</dc:creator><author>raymanan</author><pubDate>Tue, 26 Jan 2010 09:20:00 GMT</pubDate><guid>http://www.cppblog.com/raymanan/archive/2010/01/26/106479.html</guid><wfw:comment>http://www.cppblog.com/raymanan/comments/106479.html</wfw:comment><comments>http://www.cppblog.com/raymanan/archive/2010/01/26/106479.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/raymanan/comments/commentRss/106479.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/raymanan/services/trackbacks/106479.html</trackback:ping><description><![CDATA[<div>
<h2><a href="http://creativecommons.org/licenses/by/3.0/deed.zh" target=_blank><font color=#0099cc><u>转自：</u></font></a><br><a href="http://gang613.blogbus.com/logs/4320547.html"><font color=#0099cc><u>http://gang613.blogbus.com/logs/4320547.html</u></font></a><br><br></h2>
<div>
<p>通过iReport可以方便的设计Jasperreport报表，其中的子报表功能给报表设计带来很大的便利，不过iReport的Guide中对subreport的设计描述并不详尽，通过摸索后做了一些总结。</p>
<p>一、在主报表中关于子报表元素的设计属性<br>下面两图为子报表（subreport）的属性Dialog</p>
<div style="TEXT-ALIGN: center"><img alt="" src="http://gang613.blogbus.com/files/1169105447.jpg"><br><br>
<div style="TEXT-ALIGN: left"><br>
<div style="TEXT-ALIGN: center"><img alt="" src="http://gang613.blogbus.com/files/1169105472.jpg"><br><br></div>
</div>
<div style="TEXT-ALIGN: left">a) <span style="FONT-WEIGHT: bold">Parameters Map Expression</span>表示子报表的参数引入从主报表的参数&#8220;paramsub2&#8221;中获得，&#8220;paramsub2&#8221;的类型为&#8220;java.util.Map&#8221;；<br><br>b) <span style="FONT-WEIGHT: bold">Connection DataSource Expression</span>表示子报表的数据源从何获得，我的子报表数据源从主报表的参数&#8220;datasetsub2&#8221;中获得，&#8220;datasetsub2&#8221;的属性为&#8220;net.sf.jasperreports.engine.data.JRBeanCollectionDataSource&#8221;；<br><br>c）&#8220;<span style="FONT-WEIGHT: bold">Subreport Expression</span>&#8221;是很重要的设置项，可以采用字符串类型表示子报表的路径，来引导主报表加载子报表的jasper文件，我还是喜欢直接从主报表的参数中获得子报表的jasper对象。如上图设置。<br><br>二、子报表中的设置项<br><br>
<div style="TEXT-ALIGN: center"><img alt="" src="http://gang613.blogbus.com/files/1169105484.jpg"> <br><br>
<div style="TEXT-ALIGN: left">子报表中的参数设置和变量设置和设计单独的报表无异，不同处只在于加载时通过主报表加载，即先将报表参数传给主报表（如上图的&#8220;paramsub2&#8221;），然后由主报表传给子报表。<br><br>有一点要注意，在报表设置中，&#8220;如果没有数据时&#8221;选项中，如果设置为NoPages则在没有datasource传入时，该子报表在主报表中不显示。<br><br>开始通常不注意该参数，但在调试中使用空数据时没有看到子报表输出，一直不明原因，导致走了弯路。<br><br>三、代码<br><br>JasperReport jasperReport = (JasperReport) JRLoader.loadObject(reportFile.getPath()); //主报表<br><br>JasperReport sub0jasperRep = (JasperReport) JRLoader.loadObject(subreport0File.getPath()); //子报表；<br><br>Map m = new HashMap(); //主报表的参数；<br>Map submap = new HashMap(); //子报表的参数；<br><br>m.put("sub2",sub0jasperRep); //将子报表的jasper传入主报表的参数"sub2"；<br><br>//将子报表的datasource传给主报表的参数"datasetsub2"；<br>m.put("datasetsub2",new JRBeanCollectionDataSource(sub2datasource));<br><br>//将子报表的参数表submap通过主报表的参数"paramsub2"传入；<br>m.put("paramsub2",submap);<br><br>//主报表装载参数和数据源；<br>JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, m, new JRBeanCollectionDataSource(dataset));<br><br>如此基本完成子报表和主报表的载入。<br></div>
</div>
</div>
</div>
</div>
</div>
<img src ="http://www.cppblog.com/raymanan/aggbug/106479.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/raymanan/" target="_blank">raymanan</a> 2010-01-26 17:20 <a href="http://www.cppblog.com/raymanan/archive/2010/01/26/106479.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>