在使用iReport_3.5.2工具设计交叉报表,发现从数据库中查询出来的数据的排列顺序,在iReport报表工具中会发生变化,引文该工具在默认情况下的排列顺序是:Ascending/Descending;
如果我去出的数据是string类型,那么会有如下小问题(以列组(column groups)为例):
查询结果:
项目1 项目2 项目3 ...项目10 项目11...项目20..
而工具默认导出顺序(asscending):
项目1 项目11... 项目2 项目20.. 项目3 ...
也就是它是按字符的ASCCII码来排序。
该元素(row / column groups)还有个属性:Comparator exp.(要求是java.util.Comparator的实现类),
步骤一:
可以通过实现java.util.Comparator 接口,自己写个比较类:
package com.junefsh.utils;
import java.util.Comparator;
public class JsReportComparator implements Comparator<Object> {
public int compare(Object o1, Object o2) {
int rst = 1;
String s1 = (String) o1;
String s2 = (String) o2;
int s1_ln = s1.length();
int s2_ln = s2.length();
if(s1.startsWith("小额")){
if(s2.startsWith("小额")){
if(s1_ln < s2_ln)
rst = -1;
else if(s1_ln == s2_ln){
rst = s1.compareTo(s2);
}else{
rst = 1;
}
}else{
rst = -1;
}
}else if(s2.startsWith("小额")){
rst = 1;
}
return rst;
}
}
其中注意的是compare()方法需要根据自己的需求实现,该方法主要比较的是row/column groups 中的bucket expression 。
步骤二:
模板中导入我们新建的类
<import value="com.junefsh.utils.JsReportComparator"/>
添加一个Parameter
<parameter name="myOrder" class="com.junefsh.utils.JsReportComparator" isForPrompting="false">
<parameterDescription><![CDATA[]]></parameterDescription>
<defaultValueExpression><![CDATA[new JsReportComparator()]]></defaultValueExpression>
</parameter>
将row / column groups 属性Comparator exp.引用我们添加的参数:$P{myOrder}
步骤三
我们要把JsReportComparator 类加载到项目中,以便调试,把该文件打包成jar,在iReport IDE 中 "工具"-》“选项”-》"iReport"->"classpath" 将,jar添加,此后便可调试看效果了