Ireport报表插件使用之二——table组件(Ireport5.6.0版本)

简介: Ireport如何使用table组件,其中list,子表,交叉表也是这种用法

1、如何配置数据源,加载属性参见上一篇博客《Ireport报表插件使用之—参数使用》

2、在ireport中,table与list等个人认为应该算是主报表的子报表(例如:交叉报表,个人认为与table这种组件类似,都是作为子表使用);需要说明的是,子表的数据全部都是来自主表,但是有一点需要说明:子表(table)需要使用字段属性名称必须跟主表的一致。在paramer里面子定义参数作为变量提供给子表使用变量的关联参见下图:

38413db5f2e6c4f27b6befc31b245fc4bdce6aef

3、主表新建外部参数,名字必须对应,Field字段里面的内容从Datasourc(数据库,或者JavaBean)集合传递
7a58d0cd0835db1ad1d1ea97c28483ac45f837c6
4、子表的属性字段(注意:这里注意区分与3的区别,虽然字段file看起来都一样其实是此处是是DataSet标示子表的数据集合);注意如果table上特殊的表头或者标题,需要在子表的paramer里面自定义参数,然后主表也自定义参数,名称可以一致可以不一致,但是需要映射关系,如果映射关系参见:第6步
5b2fa2af9b564ec0a245ed03fc2e73933aecbd75
5、为子表配置 数据源(为DataSet)
556b997b327370c065d624b0da43f187a73a7f01
8c47d2598820099fb3b294cb3d0ebd07254771cc
6、为子表的自定义参数关联主表定义的参数变量,右键选择:
9dc9429f2cb93c8ee2ba11cce13115afffb30860
ecc8f168b652f431e1e648640ee6b6a04326728d
7、 映射主表和子表之间的参数(注意需要双击选择,而不是点击)
da5846e9d2ab06c8aa661a9e3ef4a757e268bef4
8、定义controller层方法返回Model:说明这里的controller层只是在生产环境中或者测试环境使用的时候描述如何返回数据,我们在开发过程中,可以使用javaBeanl来模拟数据,此步骤可以省略
public String selectMajorProdAccumIncome(Model model,HttpServletRequest request){ try { KpiMajorProdIndusAllBO kpiMajorProd = new KpiMajorProdIndusAllBO(); kpiMajorProd.setSheetLevelPro("1"); kpiMajorProd.setStatDate("201803"); List<KpiMajorProdIndusAllBO> list = kpiService.selectDownlodKpiSheet(kpiMajorProd);// 报表数据源 JRBeanCollectionDataSource jrDataSource = new JRBeanCollectionDataSource(list); KpiMajorProdIndusAllVO kpiMajorProdIndusAllVO = new KpiMajorProdIndusAllVO(); kpiMajorProdIndusAllVO.setResultsList(jrDataSource); Collection<KpiMajorProdIndusAllVO> testReports = new Vector<KpiMajorProdIndusAllVO>(); testReports.add(kpiMajorProdIndusAllVO); model.addAttribute("title", DateUtil.getCurrentYear()+"年重点产品收入目标整体跟进表"); // 报表格式 model.addAttribute("ytmDataValueTitle", DateUtil.getCurrentYear()+"年累计收入:万元"); // 报表格式 model.addAttribute("quoYtmDataValueTitle", "份额:%("+DateUtil.getCurrentYearMonth()+")"); // 报表格式 model.addAttribute("nowYear", DateUtil.getCurrentYear()+"年:万元"); // 报表格式 model.addAttribute("lastYear", DateUtil.getLastYear()+"年:万元"); // 报表格式 // 动态指定报表模板url model.addAttribute("url", "/WEB-INF/jasper/KpiMajorProdIndusAllVO.jasper"); model.addAttribute("format", "html"); // 报表格式 model.addAttribute("jrMainDataSource", testReports); }catch(Exception e) { result.setCode(0); result.setData(""); result.setMsg("查询失败"); logger.info("selectMajorProdAccumIncome is error!!!",e); } return "reportView"; // 对应jasper-views.xml中的bean id }
9、定义 Factory工厂类
public class KpiMajorProdIndusAllBOTableFactory {

// 生成实体对象的个数
private static final int RECORD_COUNT = 10;

/**
* 这个方法在iReport的DataResource配置时也会用到 必须是静态方法 static
*
* @return
*/
public static Collection<KpiMajorProdIndusAllTableVO> createBeanCollection() {
Collection<KpiMajorProdIndusAllTableVO> testReports = new Vector<KpiMajorProdIndusAllTableVO>();
Collection<KpiMajorProdIndusAllBO> beanCollection = new ArrayList<KpiMajorProdIndusAllBO>();

for (int i = 0; i < RECORD_COUNT; i++) {
KpiMajorProdIndusAllBO kpiMajorProdIndusAllBO = new KpiMajorProdIndusAllBO();
beanCollection.add(kpiMajorProdIndusAllBO);
}

JRBeanCollectionDataSource resultsList = new JRBeanCollectionDataSource(beanCollection);

KpiMajorProdIndusAllTableVO tr = new KpiMajorProdIndusAllTableVO();

tr.setResultsList(resultsList);

testReports.add(tr);

return testReports;

}
}
10、定义业务Bean
public class KpiMajorProdIndusAllTableBO { private String statDate = "999"; private int num; private String indexCode = "999"; private String indexName = "999"; private String ytmDataValue = "999"; private String lyYtmDataValue = "999"; private String yoyYtmDataValue = "999"; private String quoYtmDataValue = "999"; private String momDataValue = "999"; public KpiMajorProdIndusAllTableBO() { } public String getStatDate() { return statDate; } public void setStatDate(String statDate) { this.statDate = statDate; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public String getIndexCode() { return indexCode; } public void setIndexCode(String indexCode) { this.indexCode = indexCode; } public String getIndexName() { return indexName; } public void setIndexName(String indexName) { this.indexName = indexName; } public String getYtmDataValue() { return ytmDataValue; } public void setYtmDataValue(String ytmDataValue) { this.ytmDataValue = ytmDataValue; } public String getLyYtmDataValue() { return lyYtmDataValue; } public void setLyYtmDataValue(String lyYtmDataValue) { this.lyYtmDataValue = lyYtmDataValue; } public String getYoyYtmDataValue() { return yoyYtmDataValue; } public void setYoyYtmDataValue(String yoyYtmDataValue) { this.yoyYtmDataValue = yoyYtmDataValue; } public String getQuoYtmDataValue() { return quoYtmDataValue; } public void setQuoYtmDataValue(String quoYtmDataValue) { this.quoYtmDataValue = quoYtmDataValue; } public String getMomDataValue() { return momDataValue; } public void setMomDataValue(String momDataValue) { this.momDataValue = momDataValue; } }
11、定义一个用于封装数据源List的JavaBean,注意:下图中的 resultsList变量名称必须对应该VO的 resultsList名称
public class KpiMajorProdIndusAllTableVO {
JRBeanCollectionDataSource resultsList;

public KpiMajorProdIndusAllTableVO() {

}

public JRBeanCollectionDataSource getResultsList() {

return resultsList;

}

public void setResultsList(JRBeanCollectionDataSource resultsList) {

this.resultsList = resultsList;

}
}

2290d2e8fe770bac3b0348a5f0995f25f33d2f13

12、如果生成的报表有如此大的空白,则是因为你的,面板的Title、PageHeader、ColumnHeader、Detail 1、Column Footer等的属性hight的问题,只要设置为0就行了。
ad37069d72cb5badf9d5c4bf6ed9ff8108364bb8
设置的方式:
128ab117e03f2ba8da8fbf5e6656868376f40327

相关实践学习
基于Hologres轻量实时的高性能OLAP分析
本教程基于GitHub Archive公开数据集,通过DataWorks将GitHub中的项⽬、行为等20多种事件类型数据实时采集至Hologres进行分析,同时使用DataV内置模板,快速搭建实时可视化数据大屏,从开发者、项⽬、编程语⾔等多个维度了解GitHub实时数据变化情况。
阿里云实时数仓实战 - 用户行为数仓搭建
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求:熟练掌握 SQL 语法熟悉 Linux 命令,对 Hadoop 大数据体系有一定的了解 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
相关文章
|
机器学习/深度学习 资源调度 算法
【机器学习基础】对数几率回归(logistic回归)
【机器学习基础】对数几率回归(logistic回归)
899 0
|
5月前
|
存储 运维 监控
zk基础—3.集群与核心参数
本文详细介绍了ZooKeeper(zk)的单机与集群部署方式、机器配置要求、JVM参数设置、核心配置参数、数据快照与事务日志机制、Leader选举相关参数、客户端连接限制、节点存储限制、端口通信、数据文件清理策略、事务日志风险控制、运维命令等内容,帮助读者全面掌握ZooKeeper的部署、调优和日常运维操作。
|
人工智能 大数据 开发者
阿里云技术解决方案开放免费试用,热门AI场景免费体验!
阿里云推出免费试用计划,2025年7月起,新老用户均可领取100点试用点,用于部署体验技术解决方案。完成部署还可再获最高100点,相当于一年200元云资源免费用。支持AI、大数据、安全等多个领域,涵盖DeepSeek部署、模型微调等热门场景。点击链接即可领取,快速上手云上方案。
|
前端开发 数据库 JavaScript
基于Flowable的流程挂接自定义业务表单的设计与实践
文章讨论了如何在Flowable流程引擎中挂接自定义业务表单,以及相关设计和实践的步骤。文章中包含了一些前后端代码示例,如Vue组件的模板和脚本部分,这些代码用于实现与Flowable流程引擎交互的界面。例如,有一个按钮组件用于提交申请,点击后会触发applySubmit方法,该方法会与后端API进行交互,处理流程启动、查询关联流程等逻辑。
53397 11
|
IDE 程序员 开发工具
IDEA插件-Material Theme UI/IDEA最强主题插件/IDEA图标美化
"Material Theme UI" 是一个用于 JetBrains IDE(如 IntelliJ IDEA、WebStorm、Android Studio 等)的插件,它将原始外观改为 Material Design 风格,并提供丰富的选项来根据个人喜好配置 IDE。
4826 0
IDEA插件-Material Theme UI/IDEA最强主题插件/IDEA图标美化
|
Java API Maven
bcprov-jdk15on是什么依赖用在哪里
【6月更文挑战第11天】bcprov-jdk15on是什么依赖用在哪里
7056 3
|
安全 Linux 网络安全
Kibana 最常见的“启动报错”或“无法连接ES集群服务”的故障原因及解决方案汇总
Kibana 最常见的“启动报错”或“无法连接ES集群服务”的故障原因及解决方案汇总
Kibana 最常见的“启动报错”或“无法连接ES集群服务”的故障原因及解决方案汇总
|
资源调度 JavaScript Windows
'vue-cli-service' 不是内部或外部命令,也不是可运行的程序问题解决
【5月更文挑战第7天】'vue-cli-service' 不是内部或外部命令,也不是可运行的程序问题解决
20123 3
|
JavaScript
如何通过js将一base64编码的图片显示在html中
如何通过js将一base64编码的图片显示在html中
4349 0