天天看点

Jasperreport利用子报表实现合并行

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

Jasperreport利用子报表实现合并行

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

Jasperreport利用子报表实现合并行

由于这是在一个商业项目,所以只把主要的代码贴出来.我测试用的后台方法是一个Servlet,导出的是pdf.

 //定义子报表的数据

Map parameters = new HashMap();

parameters.put("ReportTitle", "Address Report");

parameters.put("BaseDir", reportFile.getParentFile());

parameters.put("IsBgView", true);

//定义主报表的数据

List<Map> datas = new ArrayList();

Map temp = null;

List <Map>devices = null;

//这里去遍历rtu这个对象

for(WrRRtu rtu : wrtest.getAll()){

devices=new ArrayList();

temp = new HashMap();

temp.put("recid", rtu.getRecid());

temp.put("rtumc", rtu.getRtumc());

temp.put("rtudm", rtu.getRtudm());

//这里给主报表添加数据

datas.add(temp);

//通过rtu去查它的子数据

for(WrRDevice dev :wrdtest.getWrRDeviceByRtuRecid(rtu.getRecid())){

temp = new HashMap();

devices.add(temp);

//当前rtu所有的子数据

temp.put("recid", dev.getRecid());

}

//把当前rtu的子数据放在parameters里

parameters.put(rtu.getRecid(), new JRListDataSource(devices));

}

//我这是导出PDF的

byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, new JRListDataSource(datas));

  主报表中设置子报表的代码:

<subreport isUsingCache="true">

<reportElement key="subreport-1" x="181" y="0" width="285" height="22"/>

<dataSourceExpression><!--[CDATA[$P{REPORT_PARAMETERS_MAP}.get($F{recid})]]></dataSourceExpression>

<subreportExpression class="java.lang.String"><![CDATA[$P{SUBREPORT_DIR} + "DepartmentList_department_person.jasper"]]--></subreportExpression>

</subreport>

 子报表中,仍旧按传统的方法取就OK了.

继续阅读