刚开始学ireport是使用sql作为数据源,因为直接sql是最简单也最容易上手的,但是sql已经无法满足现在的业务需求了,于是乎寻找其他的解决方案,于是乎找到了JRDataSource数据源。个人觉得sql数据源最简单,其次就是JRDataSource数据源了。

一、使用JRDataSource数据源首先要实现 JRRewindableDataSource 接口

/*** @Author: BlueSky* @CreateTime: 2020-01-06 13:50* @Description:*/import java.util.List;import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;
import net.sf.jasperreports.engine.JRRewindableDataSource;public class GenericDataSource implements JRRewindableDataSource{int index;List<PrintRecord> records;public GenericDataSource(List<PrintRecord> records) {this.records = records;this.index = -1;}@Overridepublic Object getFieldValue(JRField jrField) throws JRException {String fieldName = jrField.getName();return records.get(index).getValue(fieldName);}@Overridepublic boolean next() throws JRException {++index;return index < records.size();}public void moveFirst() {}
}

二、新建一个通用打印的类

/*** @Author: BlueSky* @CreateTime: 2020-01-06 13:51* @Description:*/import java.util.HashMap;
import java.util.Map;public class PrintRecord {public static final int KEY_NOT_FOUND = -1;Map<String, Object> vals;public PrintRecord() {vals = new HashMap<String, Object>();}public void setValue(String key, Object value) {vals.put(key, value);}public Object getValue(String key) {Object val = vals.get(key);if (val == null)return "";elsereturn val;}public int getKeyNum() {return vals.size();}
}

三、在java中封装所需要打印的参数数据(ps:详情见第六步代码)

四、在需要打印的报表中新建数据接收参数

  1. parameters -> add
  2. list集合参数需要注意下参数类型,这里需要把 Parameter Class 设置为 net.sf.jasperreports.engine.JRDataSource 类型。(ps:下拉框中没有的话直接复制上述类型粘贴到它下拉框中)

五、刚刚新建接收的list数据还无法直接在当前输出,我们还需要新建一个子报表,通过它来输出list内容

  1. 窗口 -> 打开组件面板 -> subreport 拉取它到相应位置
  2. 设置子报表Parameters 为装list的参数
  3. 去往子报表中 field 添加list集合中的属性
  4. 然后把添加的 field 拖到 Detail Brand中就能显示了

六、查看成果

public static void main(String args[]) {try {// 获取源文件String path = "C:\\Users\\25109\\Desktop\\    \\iReportModel\\销售合同报表√\\javabean\\testBean.jasper";TestModel testModel = new TestModel();testModel.setProvice("湖南");testModel.setCity("长沙");TestModel testModel2 = new TestModel();testModel2.setProvice("湖南");testModel2.setCity("株洲");TestModel testModel3 = new TestModel();testModel3.setProvice("湖北");testModel3.setCity("武汉");List<TestModel> testModelList = new ArrayList<>(); //需要打印的list数据testModelList.add(testModel);testModelList.add(testModel2);testModelList.add(testModel3);HashMap<String, Object> map = new HashMap<String, Object>();List<PrintRecord> printRecordList = new ArrayList<>(); // 封装后的数据集合for (TestModel p : testModelList) {PrintRecord pr = new PrintRecord();pr.setValue("provice",p.getProvice()); // 子报表需要建立对应的fieldpr.setValue("city",p.getCity());printRecordList.add(pr);}map.put("data",new GenericDataSource(printRecordList)); // 主报表需要建立名为data的 Parametersmap.put("staticParam","静态参数");JasperPrint jasperPrint = JasperFillManager.fillReport(path, map, new JREmptyDataSource());if(jasperPrint != null && jasperPrint.getPages().size() > 0){JasperViewer jasperViewer = new JasperViewer(jasperPrint,false); //以视图方式进行预览jasperViewer.setVisible(true);jasperViewer.setAlwaysOnTop(true);jasperViewer.getGraphicsConfiguration().getDevice().setFullScreenWindow(jasperViewer);}else {System.err.println("报表内容为空暂不输出");}}catch (Exception e){System.err.println(e.getMessage());e.printStackTrace();}}

点击下载本案例

ireport 使用list数据源相关推荐

  1. ireport5.6+jasperreport6.3开发(四)--以javabean为基准的报表开发(ireport)

    javabean完成以后就是添加ireport的报表了 打开ireport的option然后在classpath中添加路径. 然后在ireport中追加数据源如图,点击图标后会出现数据源列表然后按ne ...

  2. iReport制作报表

    文章将会涉及3个方面的内容: 第一部分:使用iReport制作报表的详细过程(Windows环境下) 第二部分:使用Jasperreport作为报表控件开发胖客户端报表应用 第三部分:使用Jasper ...

  3. 第一部分:使用iReport制作报表的详细过程(Windows环境下)

    第一部分:使用iReport制作报表的详细过程(Windows环境下) 提示:在有些板块,文中的图片看不到,建议到我的blog浏览文章:http://blog.csdn.net/jemlee2002/ ...

  4. ireport中文手册3.7版(无图)

    目录 Giulio Toffoli 1 1 序言... 6 什么是iReport?. 6 功能特点:... 7 iReport 社区:... 7 鸣谢:... 8 2 入门... 8 必要条件:... ...

  5. iReport 设计介绍

    iReport是一个能够创建复杂报表的开源项目.它100%使用Java语言编写.是目前全球最为流行的开源报表设计器. 由于它丰富的图形界面,你能够很快的创建出任何一种你想要的报表. 以下是iRepor ...

  6. jasperreport开发手册--ireport教程

    转自:  https://blog.csdn.net/frankaqi/article/details/50203877 iReport   http://www.jasperreport.net 一 ...

  7. iReport 无数据源格式报表

    报表这个恶心玩意,做了一次真心不想再做第二次. 之所以选择无数据源的格式来写报表,主要原因是因为业务太复杂,写sql太麻烦(其实不写sql这种方式也他么也不简单,但是对比写sql来说逻辑上更容易实现一 ...

  8. ireport参数传递json_iReport 使用json 数据源

    前面几番折腾,已经安装好了iReport并且可以正常启动,这里面用的是5.6.0版本,现在记录下使用json作为数据源的操作步骤.这个图文教程超级详细,是__馋猫原创真的是原创 一.首先,创建json ...

  9. ireport参数传递json_ssm中iReport报表使用json数据源过程体会

    前言:做这个一定要有耐心,因为报表本就是数据杂糅到规整的过程,这篇心得会细讲每一步操作,如果只想着一眼到位,建议close tab 在公司中遇到项目,大概是一个这样的需求,有一个列表和一个标题,需要把 ...

  10. java使用ireport生成报表_JasperReport(3)——Java简单使用IReport生成的文件建立报表...

    先看看设计的报表样式: reportTitle是新添加的一个参数,而其他的id和name是通过数据源得到的Filed.IReport在设置参数的时候需要先在左边新建一个parameter,然后再把该p ...

最新文章

  1. TensorFlow中的对象检测教程:实时对象检测
  2. PHP语言 -- 数组
  3. 初识Mysql(part5)--我需要知道的11条Mysql语句之过滤
  4. 【翻译】使用Ext JS设计响应式应用程序
  5. RobotFramework自动化测试框架的基础关键字(五)
  6. thinkphp仿百度文库网站源码
  7. 源码网络-推荐精品×××站
  8. 混淆Android JAR包的方法
  9. 百练OJ:2799浮点数格式
  10. 【node进阶】深入浅出前后端身份验证(上)---session
  11. 数仓搭建 DWT 层
  12. 单击即可提高游戏速度:什么是可调整大小的BAR?
  13. NYOJ 237 NYOJ 239 二分图 最大匹配模板题 游戏高手的烦恼 月老的难题 两个题一样
  14. Oracle中的索引
  15. MicrosoftExcel函数
  16. Dilworth定理是个啥东东
  17. 数据安全三要素:机密性、完整性、身份验证
  18. 南京计算机学校李鑫,南京邮电大学李鑫等:一种基于参数扰动的芯片成品率双目标优化框架...
  19. JavaScript原型的作用
  20. 产业园区的10种主要招商渠道

热门文章

  1. 【历史上的今天】6 月 1 日:Napster 成立;MS-DOS 原作者出生;谷歌出售 Google SketchUp
  2. 申请CSDN博客专家认证成功
  3. 有哪些VPS云主机值得学生选择?
  4. 【全自动网盘扩容软件使用教程】百度网盘自助无限扩容+自助无限修复软件使用步骤说明
  5. VMware通过vmdk安装Kali linux
  6. Alien Skin Exposure X4 Bundle 4.5.3.66 特别版 Mac 模拟胶片效果调色滤镜
  7. 深入理解计算机系统(第三版)家庭作业 第九章
  8. java-家庭作业3
  9. ubuntu18.04装N卡驱动后无法开机或关机的解决方法
  10. 书单(三)-从小到大课外阅读书籍顺序