ireport5.0分组报表的一些总结

最近用ireport5.0做报表界面的展示,用到了很多分组以及分组里面嵌套分组的情况,做一下总结。

具体分组的需求如下:

“分组”:

提供两个组合框控件,选择项都为“全部”、“省份”、“城市”,两个组合框控件互控关系:

1、某个组合框选择“全部”时,另一个组合框的选择项为“全部”、“省份”、“城市

2、某个组合框选择“省份”时,另一个组合框的选择项为“全部”、“城市

3、某个组合框选择“城市”时,另一个组合框的选择项为“全部”、“省份”

报表呈现的控制:

选择了“省份”时,报表中“省份”字段不在表格中显示,而在组的标题处显示,同理,选择了“ 城市”时,报表中“ 城市”字段不在表格中显示,而在组的标题处显示。


需求分析:在一张ireport报表界面中要实现按省份分组,城市分组,省份+城市分组,城市+省份分组,不分组这五种情况。

思路:通过在ireport报表中定义参数,根据参数的值来进行动态分组即分组条件是动态的,根据条件来判断显示那个分组的表头和表尾。

具体:在报表中定义2个参数pamCondition1类型Stirng,pamCondition2类型String省略为p1,p2

分组情况如:

1. p1=0,p2=0  不分组;

2. p1=1,p2=0或p1=0,p2=1  省份分组;

3.p1=2,p2=0或p1=0,p2=2   城市分组;

4.p1=1,p2=2 省份+城市分组;

5.p1=2,p2=1 城市+省份分组;

a.首先考虑不分组的情况,在detail1和Column Header拉入你要显示的字段名及字段循环的值,选中detail1和Column Header栏,在Print When Expression中加入显示条件

new Boolean($P{pamCondition1}.equals( "0" ) && $P{pamCondition2}.equals( "0" ))  即满足p1=0,p2=0时不分组

b.建立分组名report1

分组条件

new Boolean(
  ($P{pamCondition1}.equals( "0" ) && $P{pamCondition2}.equals( "1" ))
  || ($P{pamCondition1}.equals( "1" ) && $P{pamCondition2}.equals( "2" ))
  || ($P{pamCondition1}.equals( "1" ) && $P{pamCondition2}.equals( "0" ))
)?$F{province}:$F{city}     条件成立就按省份分组,否则按城市分组 

在report1 Group Header1中加入要显示的列名,新建detail2加入你要显示的列值。

在report1 Group Header1 ,detail2,report1 Group  Foot1的Print When Expression中加入显示条件

new Boolean(
  ($P{pamCondition1}.equals( "0" ) && $P{pamCondition2}.equals( "1" ))
  || ($P{pamCondition1}.equals( "1" ) && $P{pamCondition2}.equals( "2" ))
  || ($P{pamCondition1}.equals( "1" ) && $P{pamCondition2}.equals( "0" ))
)   即report1 Group Header1 ,detail2,report1 Group  Foot1做为一个整体用来显示省份分组的情况,在满足条件的情况下才显示。

同理按城市分组只需要为report1新增加一个分组头report1 Group Header2同于显示列名,detail3显示列值,report1 Group  Foot2用于显示分组统计结果,

分组条件是report1的分组条件,显示条件是:

new Boolean(
    ($P{pamCondition1}.equals( "0" ) && $P{pamCondition2}.equals( "2" ))
 || ($P{pamCondition1}.equals( "2" ) && $P{pamCondition2}.equals( "1" ))
 || ($P{pamCondition1}.equals( "2" ) && $P{pamCondition2}.equals( "0" ))
) 即report1 Group Header2 ,detail3,report1 Group  Foot2做为一个整体用来显示城市分组的情况,在满足条件的情况下才显示。

c.建立分组repprt2

分组条件

new Boolean(
    $P{pamCondition1}.equals( "1" ) && $P{pamCondition2}.equals( "2" )
)?$F{city}:$F{province}  

report2 Group Footer1的显示条件是:

new Boolean(
    $P{pamCondition1}.equals( "1" ) && $P{pamCondition2}.equals( "2" )
)   即 report Group Header1 ,detail2,report2 Group Footer1 是用于显示省份+城市分组的结果。

为report2新建一个分组尾,report2 Group Footer2  显示条件

new Boolean(
    $P{pamCondition1}.equals( "2" ) && $P{pamCondition2}.equals( "1" )
)  即 report Group Header2 ,detail3,report2 Group Footer2 是用于显示城市+省份分组的结果。


ireport5.0分组报表的一些总结_第1张图片

             


你可能感兴趣的:(IREPORT)