近来做报表的时候,有个交叉报表让列头按照指定顺序排序,自己纠结了好久也没找出解决办法,于是乎,本人就开始在网上“大肆”搜索……,还好还好,虽然没找到完整的解决办法,但是通过“前人”们总结的点点滴滴,还是得到了点儿启发,顺理成章的呢,我就又“造”出了下面的这一篇……
本人之前写过一篇有关用iReport制作检查报表的例子,此处也就继续那个例子开始往下说了哈!
1、 报表中通常我们的sql语句是这样写的:selects.student_name_,s.grade_,s.subject_name_ from student s,编译,运行之后,我们会看到如图1的结果,(注意:列头的排序结果是数学、英语、语文)
图1
但是若想让列头的排列顺序是:语文、数学、英语,这要怎么办呢?可能有的人要说了,在sql语句中加个order by语句就ok了,嗯,的确哦,在数据库中是可以的,或许碰巧在您的报表中也会就能得到您想要的结果,但那仅仅是“碰巧”哦,这里我要向大家介绍的是另一种实现您的报表列头排序的方法!
2、 在您的sql语句中动一下“手脚”,写成这样的:
select s.student_name_,s.grade_,
case to_char(s.subject_name_)
when to_char('语文') then to_char('A语文')
when to_char('数学') then to_char('B数学')
when to_char('英语') then to_char('C英语')
end as subject
from student s orderby s.subject_name_ desc,运行的结果如图2所示:
图2
3、 因为报表中显示了多余的字段,所以呢,我们就要想办法把多出来的字符串去掉!如图3点击Crosstab1到交叉报表的页面,单击显示列标题的文本框,在窗体的右侧就会显示该文本框的属性
图3
4、 如图4所示:在属性窗口中找到TextField Expression属性,点击最右边的“…”按钮
图4
5、 如图5.1所示,在黑色光标处写函数substring,结果如图5.2所示,然后单击【确定】
图5.1
图5.2
6、 编译,预览的效果如图6所示
图6
至此,就实现了我们想要的功能了!还有一个小问题,不知您看出来没有啦,就是:我添加了A、B、C后,报表就按照指定的顺序出来了,其实呢,iReport是按照首个字符的ASCII码来排序的呢,ok!就这样了!