本文主要是介绍jasperreport不适用子报表实现中国式分组报表功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
副标题: 单行统计报表中如何通过一列的值决定另一列是否显示
上面这个报表的统计要求是当“列9”的值不变动时,“列1”的值就不重复打印。
如上图效果 “列9”第1,2行值相同,所以“列1” 只第一行显示,第二行空白。
同样,“列9”第3,4行值相同,只显示第3行,第4行空白。
上面报表展现效果,按照我以前的一贯实现思路 ,想到的是运用jasperreport的子报表(subReport)去实现,即
根据“列9”的数据,构建好一个查询的数据的视图,视图数据样例如下:图1
然后根据“列1”列值做分类统计,报表模板样式如下:
然后根据主报表中传递过来的“列1”的值,在子报表中和隐藏的“列1”的值做比较,从而展现相应的数据。
上面这种做法实现起来比较麻烦,且不是最优方案。
下面给出第二种方案:
方案前提:必须使用javabean数据源
jasperreport使用javabean数据源,默认使用JRDataSource dataSource = new JRBeanCollectionDataSource(list);
JRBeanCollectionDataSource 做报表数据源,这个类中有getFieldValue 方法用于获取当前bean的属性。
我们可以重写JRBeanCollectionDataSource 类,并重写getFieldValue 方法
在重写getFieldValue 方法中我们可以根据“列9”的值 去判断 “列1”的 值 是否打印,从而实现图1 的效果。
这篇关于jasperreport不适用子报表实现中国式分组报表功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!