iReport 交叉报表(crosstable)排序

在使用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添加,此后便可调试看效果了

你可能感兴趣的:(java,ide,idea)