iReport中顺序序列的分组问题

需求描述:

有如下数据源:

No.Store
19923
29923
39923
49923
59923
69923
89923
99923
109923
119923
129923

怎么在不添加任何代码的情况下,在iReport中实现打印如下结果:

FromToStore
169923
8129923

解决思路以及引申:

1.背景

在iReport中有分组的功能,按照某个Key实现分组,如下数据源:

No.Store
19923
29923
39923
49923
59923
69923
79923
89923
99923
109923
119923
129923

Step.1: 在iReport中定义两个Field: $F{No.}和$F{Store}(为了简化问题,只保留两个field)

Step.2: 使用iReport的分组功能【Add Report Group】,以$F{Store}作为分组依据

Step.3: 设计报表,如下图所示:



Step.4: 预览报表,如下图所示:



如果客户在前端程序中删去了其中某一条记录,例如No.为7的记录,那么数据源变为如需求描述中所示的那样:

No.Store
19923
29923
39923
49923
59923
69923
89923
99923
109923
119923
129923

如果你再次在iReport中预览的时候,你会发现预览结果和上面的一样,但是理想的结果应该是:按照顺序序列No.以1递增的记录分为一组,如果中间断开了,要另为一组,效果如下:



2.解决办法

Step.1: 和原来一样,在iReport中定义两个Field: $F{No.}和$F{Store}

Step.2: 使用iReport的分组功能【Add Report Group】,但是分组依据要变为(($F{No.} 的值 - $V{REPORT_COUNT} 的值 + 1) 再拼接$F{Store}的值),由于我在iReport中定义的$F{No.}和$F{Store}都是String类型,所以类型转换后的分组依据列的表达式应该是这样:

<pre name="code" class="java">String.valueOf(
( Integer.valueOf($F{No.}).intValue() - $V{REPORT_COUNT}.intValue()) + 1).concat($F{Store})
 Step.3: 预览报表,惊喜无限 
微笑 


3.解释

$V{REPORT_COUNT}是iReport中自带的变量,每次有数据循环的时候自增1,最后是统计出报表中条目的总个数。

我列出以下表格,大伙们应该就知道原因了:

No.StoreREPORT_COUNT的值(No. - REPORT_COUNT的值 + 1)
1923311
2923321
3923331
4923341
5923351
6923361
8923372
9923382
10923392
119233102
129233112
分组依据变为Store的值拼接(No. - REPORT_COUNT的值 + 1)的值,就实现了保持顺序序列的分组问题.


当然大伙们可以私下试试几个地方断开的情况,同样适用的,以下是断开No.为7和No.为10的报表预览:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值