`
bighappy1983
  • 浏览: 15934 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

JasperReport动态报表归并行数据

 
阅读更多

在报表打印的过程中,打印记录的归并,合计是一个非常普遍的场景,下面我承接<<如何使用JasperReport做动态报表>>,如何在动态报表实现行的归并和合计。

在Jasper报表本身提供的合计和归并的功能,经过使用,发现要和上一篇提到的Jasper动态报表结合非常困难。

第一在归并问题上,jasper报表的归并必须以报表呈现中的某一行进行归并,但在实际过程中,我们往往希望通过一个不进行打印呈现的行进行归并。

第二在汇总行上,jasper报表会在每一页上加上一个汇总信息,但在实际运用过程中,我们只希望在报表的第一行出现合计数据,而不是每一页。

第三为了兼容归并和统计场景,我们必须维护更复杂的报表模板或者是维护几套模板。

 

基于此,我在这里给出另外一个解决方案:归并和统计功能,我们不使用JasperReport, 我们在动态报表引擎通过处理要呈现的数据集合 DateList(归并,合计),然后使用再归并统计过的数据集合进行报表填充,来代替jasperReport的归并统计功能。这样做可以:

第一:归并可以不依赖与报表中的呈现数据,我们在归并数据集时,完全可以根据一个隐藏字段进行,而这个字段压根不会在jasperReport中出现

第二:我们把统计数据插入到集合中的首位,这样在报表呈现时,表现为只有第一页的第一行为统计数据。

第三:我们可以沿用以前的报表模板,报表模板维护简单

 

当要使用DynaJasper的归并和统计功能是,只要在构造模型是,给响应的列添加响应的属性即可.

 

查看nst.report.jasper.ext.ColumnInfo的如下属性

//是否为统计列,默认为false,如果为true,那么该列将会被统计

       //在没有统计的情况下,不会在首页首行添加统计行

      //统计列数据必须为数字类型

private boolean gatherColumn = false;

 

/**

 * 是否为归并行的依据列,在做数据处理时,<br>

 * 如果所有groupColumn=true的列和上一次的列数据相同,<br>

 * 那么会被认为是同一条数据.<br>

 * 这个时候所有列printedInGroup=true的列数据会被设置成NULL<br>

 * printedInGroup = false 的列数据则保持原值<br>

         *在没有归并列的情况下,不进行归并

 */

private boolean groupColumn = false;

 

/**

 * 在归并行时是否进行归并,在做数据处理时,<br>

 * 如果所有groupColumn=true的列和上一次的列数据相同,<br>

 * 那么会被认为是同一条数据.<br>

 * 这个时候所有列printedInGroup=true的列数据会被设置成NULL<br>

 * printedInGroup = false 的列数据则保持原值

 */

private boolean printedInGroup = true;

/**

 * 是否为隐藏列,隐藏列不进行显示

 */

private boolean hided = false;

 

下载附件后,解压后使用eclipse打开DynaJasperProject工程,运行classpath:TestMergeRecord查看效果(该附件和《如何使用JasperReport做动态报表》的源码附件相同,避免重复下载)。

另外在classpath:TestTipText中展现另外一个小功能:在报表的右上角展现不同的信息。

效果图:

 

由于整个完整的eclipse的工程较大,要整个工程源码的朋友可以到我的个人博客上下载(http://www.chlusoft.com/tech/index.jhtml)

原创文章,转载请注明个人博客出处:http://www.chlusoft.com/tech/345.jhtml

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics