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。如下图所示

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

添加DataSet

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

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

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

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

添加Table组件

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

2.选择 Use a JRDatasource expression,填写new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{teachList})数据,点击next按钮。

这里是把teachList属性包装为一个JRBeanCollectionDataSource集合对象作为Table的数据源

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

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

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

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

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

代码开发

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

本节代码和报表模板

JasperReports入门教程(四):多数据源的更多相关文章

  1. JasperReports入门教程(一):快速入门

    JasperReports入门教程(一):快速入门 背景 现在公司的项目需要实现一个可以配置的报表,以便快速的适应客户的需求变化.后来在网上查资料发现可以使用JasperReports + Jaspe ...

  2. 无废话ExtJs 入门教程四[表单:FormPanel]

    无废话ExtJs 入门教程四[表单:FormPanel] extjs技术交流,欢迎加群(201926085) 继上一节内容,我们在窗体里加了个表单.如下所示代码区的第28行位置,items:form. ...

  3. PySide——Python图形化界面入门教程(四)

    PySide——Python图形化界面入门教程(四) ——创建自己的信号槽 ——Creating Your Own Signals and Slots 翻译自:http://pythoncentral ...

  4. Elasticsearch入门教程(四):Elasticsearch文档CURD

    原文:Elasticsearch入门教程(四):Elasticsearch文档CURD 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接: ...

  5. RabbitMQ入门教程(四):工作队列(Work Queues)

    原文:RabbitMQ入门教程(四):工作队列(Work Queues) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https:/ ...

  6. JasperReports入门教程(三):Paramters,Fields和Detail基本组件介绍

    JasperReports入门教程(三):Paramter,Field和Detail基本组件介绍 前言 前两篇博客带领大家进行了入门,做出了第一个例子.也解决了中文打印的问题.大家跟着例子也做出了de ...

  7. JasperReports入门教程(二):中文打印

    JasperReports入门教程(二):中文打印 背景 在上一篇中我们介绍了JasperReport的基本入门,也展示了一个报表.但是我们的示例都是使用的英文,如果我们把需要打印的数据改为中文会怎么 ...

  8. WebGL入门教程(四)-webgl颜色

    前面文章: WebGL入门教程(一)-初识webgl WebGL入门教程(二)-webgl绘制三角形 WebGL入门教程(三)-webgl动画 颜色效果图: 操作步骤: 1.创建HTML5 canva ...

  9. Spring Cloud 入门教程(四): 分布式环境下自动发现配置服务

    前一章, 我们的Hello world应用服务,通过配置服务器Config Server获取到了我们配置的hello信息“hello world”. 但自己的配置文件中必须配置config serve ...

随机推荐

  1. vs编译器中不允许使用scanf()的情况

    问题1描述: vs编译器中,不允许使用scanf()函数. error C4996: 'scanf': This function or variable may be unsafe. Conside ...

  2. Python python 五种数据类型--数字

    一:Number 数字 不可变类型 整型(Int) - 通常被称为是整型或整数,是正或负整数,不带小数点. 长整型(long integers) - 无限大小的整数,整数最后是一个大写或小写的L.(P ...

  3. iOS 优化实例

    一.接口请求优化 在工程项目中,多个一级界面包含状态,如:服务入口的动态配置,未读消息数量,图片文字等,因此产品设计要每次切换 tab 时都请求数据,及时的更新页面状态.在实际开发中,频繁的调用接口, ...

  4. 6.Maven构建过程的各个环节

    构建过程中的各个环节 [1]清理:将以前编译得到的旧的class字节码文件删除,为下一次编译做准备 [2]编译:将Java源程序编译成class字节码文件 [3]测试:自动测试,自动调用junit程序 ...

  5. [noip模拟]画展<队列的基础知识>

    Description 博览馆正在展出由世上最佳的M位画家所画的图画.人们想到博览馆去看这几位大师的作品.可是,那里的博览馆有一个很奇怪的规定,就是在购买门票时必须说明两个数字,a和b,代表要看展览中 ...

  6. JS 剑指Offer(二)二维数组中的查找

    04.在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. var ...

  7. Let‘s play computer game(最短路 + dfs找出所有确定长度的最短路)

    Let's play computer game Description xxxxxxxxx在疫情期间迷上了一款游戏,这个游戏一共有nnn个地点(编号为1--n1--n1--n),他每次从一个地点移动 ...

  8. 《Three.js 入门指南》3.1.1 - 基本几何形状 -圆形(CircleGeometry)

    3.1 基本几何形状 圆形(CircleGeometry) 说明: 可以创建圆形或者扇形 构造函数: THREE.CircleGeometry(radius, segments, thetaStart ...

  9. C++头文件应该干的事情

    C++头文件应该干的事情 最近在写自己项目的时候,头文件老是编译错误,后来发现还是对头文件掌握不牢. 头文件应该干什么? 所谓的头文件,其实它的内容跟 .cpp 文件中的内容是一样的,都是 C++ 的 ...

  10. Linux网络安全篇,认识防火墙(一)

    一.概念 防火墙分为软件防火墙和硬件防火墙.我们的主要讨论范围为软件防火墙. 软件防火墙又分为网络型和单一型的管理. 1.单一主机型防火墙 (1)数据包过滤型的Netfilter (2)依据服务软件程 ...