寧缺勿爛

每天起床的第一件事情就是看福布斯榜. 如果没有我,我就去好好上班!
数据加载中……
Jasperreport利用子报表实现合并行

        最近,在用做报表,其中有一部分报表中需要合并行,其实用分组解决起来没什么难度.但是客户给的Excel就是那样的,没办法.百度.google,搜了一天,确实搜到了.有人已经实现了.还提供了代码.谢谢这位heis朋友了.下面是我实现一个小例子的效果图.数据是从数据库取出的动态数据.

        左边是主报表,右边的是子报表

       由于这测试时在一个商业的项目中,所以只把主要的代码贴出来.
        我测试用的后台方法是一个Servlet,导出的是pdf.
        
 1//定义子报表的数据
 2            Map parameters = new HashMap();                                                    
 3            
 4            parameters.put("ReportTitle""Address Report");
 5            parameters.put("BaseDir", reportFile.getParentFile());
 6            parameters.put("IsBgView"true);
 7
 8            //定义主报表的数据
 9            List<Map>  datas = new ArrayList();
10            
11            Map temp = null;
12            List <Map>devices = null;
13            //这里去遍历rtu这个对象
14            for(WrRRtu rtu : wrtest.getAll()){
15                devices=new ArrayList();
16                temp = new HashMap();
17                temp.put("recid", rtu.getRecid());
18                temp.put("rtumc", rtu.getRtumc());
19                temp.put("rtudm", rtu.getRtudm());
20                //这里给主报表添加数据
21                datas.add(temp);
22                //通过rtu去查它的子数据
23                for(WrRDevice dev :wrdtest.getWrRDeviceByRtuRecid(rtu.getRecid())){
24                    temp = new HashMap();
25                    devices.add(temp);
26                    //当前rtu所有的子数据
27                    temp.put("recid", dev.getRecid());
28                }

29                //把当前rtu的子数据放在parameters里
30                parameters.put(rtu.getRecid(), new JRListDataSource(devices));
31            }

32            //我这是到处PDF的
33            byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, new JRListDataSource(datas));

       主报表中设置子报表的代码:
1<subreport isUsingCache="true">
2                <reportElement key="subreport-1" x="181" y="0" width="285" height="22"/>
3                <dataSourceExpression><![CDATA[$P{REPORT_PARAMETERS_MAP}.get($F{recid})]]></dataSourceExpression>
4                <subreportExpression class="java.lang.String"><![CDATA[$P{SUBREPORT_DIR} + "DepartmentList_department_person.jasper"]]></subreportExpression>
5            </subreport>
        子报表中,仍旧按传统的方法取就OK了.

寧缺勿爛

posted on 2010-10-15 14:49 寧缺勿爛 阅读(4194) 评论(0)  编辑  收藏 所属分类: Jasperreport


只有注册用户登录后才能发表评论。


网站导航: