JasperReports入门教程(四):多数据源

摘要:
JasperReports入门教程(IV):多数据源背景在使用报表时,一个页面需要打印多个表。每个表使用不同的数据源是一个常见的要求。方案分析通过上一篇文章中对基本组件的介绍,我们知道JasperReport报告可以有多个Detail Band,但它共享一个主数据源,多个Details共享主数据源。查看Paramter和Field,发现它们都支持java。util。列表类型。添加多个数据源1.在Parameters中添加类型为java的teachList属性。util。列表

JasperReports入门教程(四):多数据源


背景

在报表使用中,一个页面需要打印多个表格,每个表格分别使用不同的数据源是很常见的一个需求。假如我们现在有一个需求如下:需要在一个报表同时打印所有老师的数据,再打印每个年级的学生的数据。那么本章我们就用这个例子来实现多数据源。

方案分析

通过上一篇基础组件的介绍,我们知道一个JasperReport报表中可以有多个Detail的Band,但是却共享一个主数据源,多个Detail是共享这个主数据源。查看Paramter和Field发现他们都支持java.util.List类型。那么我们可不可以用一个List类型的Paramter做老师的数据源,一个List类型的Field来做学生的数据源,这样就解决了数据源的问题。

我们来看看如何打印,Detail都是读取主数据源的数据,直接通过Detail来打印行不通,我们发现一个表格组件Table,这个组件的用DataSet来做报表设计的源。而那么思路就明确了。用Paramter和Field来做数据源,用Table作为打印组件,用DataSet来填充Table中要打印的字段。

添加多数据源

1.在Paramters中新增一个teachList的属性,类型为java.util.List。如下图所示

JasperReports入门教程(四):多数据源第1张

2.在Fields新增一个studentList的字段,类型为java.util.List。如下图所示

JasperReports入门教程(四):多数据源第2张

添加DataSet

1.在Outline上右键Create Dataset创建一个teachDataset

JasperReports入门教程(四):多数据源第3张

2.如法炮制,在创建一个studentDataset的Dataset。

JasperReports入门教程(四):多数据源第4张

3.在teachDataset中的Field上增加需要打印的字段name,job

4.在studentDataset中的Field上增加需要打印的字段name,age,sex

JasperReports入门教程(四):多数据源第5张

添加Table组件

1.从右侧的basic Elements工具框增加一个Table组件到 Page Header 的Band。选择Create a Table using an existing dataset,选择teachDataset,并点击next按钮。

JasperReports入门教程(四):多数据源第6张

2.选择 Use a JRDatasource expression,填写new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{teachList})数据,点击next按钮。
这里是把teachList属性包装为一个JRBeanCollectionDataSource集合对象作为Table的数据源

JasperReports入门教程(四):多数据源第7张

3.把左边的Field全部选到右边,点击next按钮

JasperReports入门教程(四):多数据源第8张

4.下面的界面是设置Table组件需要展示的布局和样式,我们只选择Add Column Header只增加一个列头。大家可以根据需要来设置,并点击完成

JasperReports入门教程(四):多数据源第9张

5.双击Table可进入Table的编辑界面,在这个界面可以增加,减少列,设置样式

JasperReports入门教程(四):多数据源第10张

6.同样的方式,在Detail1新增一个Table组件,绑定studentDataset

JasperReports入门教程(四):多数据源第11张

7.Table组件设置Dataset如下图所示

JasperReports入门教程(四):多数据源第12张

代码开发

核心代码就是给属性teachList和字段studentList赋值,和前几章类似,比较简单就不贴代码了

本节代码和报表模板

免责声明:文章转载自《JasperReports入门教程(四):多数据源》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇包管理器conda与Pythonjavascript 高级选择器:querySelector 和 querySelectorAll下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

比阿里云快2倍的InfluxDB集群,我们开源了

经过春节假期的封闭和攻关,我们完成了FreeTSDB-v0.1.1(https://github.com/freetsdb/freetsdb)开发,并在二月份最后一天进行了发布! 继FreeTSDB-v0.0.2彻底解锁了分布式能力(针对META节点和DATA节点数据特点的不同,设计了2种不同的分布式模型,META节点的CP模式,DATA节点的AP模式,并...

记一次前后端数据加密的学习

最近项目涉及到一些敏感信息,业务要求数据在传输过程中需要加密。 这里数据传输包含2中 前后端数据传输过程 与其它服务(系统)数据交互时,数据的传输过程 这里我们先简要介绍加密算法的优缺点。再通过前后端(vue、java)代码的形式,演示加密解密的demo 1.加密算法简介 参考并整理了目前比较流行的2种加密算法 1.1.RAS 非对称加密 RAS 加密...

HashMap

一、HashMap底层实现 简单的可以从以下两个纬度去理解HashMap的底层实现原理。 数组:充当索引 链表:处理碰撞 HashMap用一个指针数组table,离散化key的作用,当加入一个 key 的时候,通过Hash算法,计算出 key所在的数组下标 i,如果table[i]位置的对象元素为null的时候,则直接将<key, value&...

查询离指定日期最近的一条数据(oracle)

select * from (  Select   *   from   t_currency_rate   where f_orig_curr='USD'   and f_dest_curr='RMB'  Order   by   abs(f_date-sysdate) ) a where rownum=1...

记录一下遇到的问题 java将json数据解析为sql语句

这样的json数据转换成sql语句   解决办法 import java.util.Iterator; import java.util.Set; import java.util.Map.Entry; import com.google.gson.JsonArray; import com.google.gson.JsonElement; imp...

Java解决关键路径问题

参考: https://www.cnblogs.com/lishanlei/p/10707808.html https://blog.csdn.net/wang379275614/article/details/13990163  关键路径问题来源于实际的生产活动,是项目管理的经典问题。 在一个复杂的项目中,整体项目的完成依赖与各个子项目的完成,而子项目...