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了.

转载于:https://my.oschina.net/u/1398304/blog/370168

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值