jquery easyui dataGrid动态改变排序字段名,排序列名不一致

 

如果属性名是propertyName,而列名是property_name,那么排序会报错,

jquery jqGrid是能指定排序列名的,而easyui的dataGrid没有,

 

需要做列名转换,

 

一、前台通过js转换

优点:高效,好编辑,省服务器资源。

缺点:暴露列名,(不过一般内网系统,这个可接受)

 

加载前做排序转换

dataGrid指定

sortName:'propertyName',

sortOrder:'asc',

multiSort:true,

onBeforeLoad:dgOnBeforeLoad

//排序转换map
var sortMap = {};
sortMap['propertyName']='property_name';

//排序转换
//dataGrig的onBeforeLoad事件引用
function dgOnBeforeLoad(param){
	if(param.sort){	//另一个参数:param.order
		var sortResult = "";
		var sorts = param.sort.split(",");
		var sort;
		for(var i=0; i<sorts.length; i++){
			sort = sorts[i].trim();
			if(sortMap && sortMap[sort]){
				sortResult += sortMap[sort];
			} else {
				sortResult += sort;
			}
			sortResult += ",";
		}
	}
	if(sortResult.length>0){
		sortResult = sortResult.substring(0,sortResult.length-1);
	}
	param.sort = sortResult;
}
 

sortName写属性名,而不是列名,这样就不会出现,在dataGrid中看不出按哪列排序的问题

 

复杂的方法,一般不用配置sortMap

//排序转换
function dgOnBeforeLoad(param){
	if(param.sort){
		param.sort=sortConvert(param.sort,null,null,true);
	}
}

/**
 * 排序转换,驼峰命名方法大写字母前加下划线(大写字母转成小写)
 * @param paramSort		排序字符串,如:addTime,modifyTime,id
 * @param sortMap		指定排序Map,没有,可以传null
 *						var sortMap = {};
 *						sortMap['propertyName']='property_name';
 * @param ignoreConvert	忽略转换的列表,以逗号分隔,如:propertyName1,propertyName2,可以传null
 * @param otherConvert  其他的,是否转换
 * @returns {String}	//add_time,modify_time,id
 */
function sortConvert(paramSort, sortMap, ignoreConvert, otherConvert){
	var ignoreMap = {};
	if(ignoreConvert && ignoreConvert.length>0){
		var ignoreConverts = ignoreConvert.split(",");
		for(var i=0; i<ignoreConverts.length; i++){
			ignoreMap[ignoreConverts[i].trim()] = true;
		}
	}
	var sortResult = "";
	var sorts = paramSort.split(",");
	var sort;
	var ch;
	for(var i=0; i<sorts.length; i++){
		sort = sorts[i].trim();
		if(sortMap && sortMap[sort]){	//先转换指定的转换
			sortResult += sortMap[sort];
		} else if(ignoreMap[sort]){		//忽略的,不转换
			sortResult += sort;
		} else if(otherConvert) {		//默认转换方式
			for(var j=0; j<sort.length; j++){
				ch = sort.charAt(j);
				if(isUpperCase(ch)){
					sortResult += "_"+ch.toLowerCase();
				} else {
					sortResult += ch;
				}
			}
		} else {
			sortResult += sort;
		}
		sortResult += ",";
	}
	if(sortResult.length>0){
		sortResult = sortResult.substring(0,sortResult.length-1);
	}
	//alert(sortResult);
	return sortResult;
}

 

二、后台通过java转换

优点:不暴露列名

缺点:用服务器资源,修改不方便

 

服务器端,写了个,不打算用,供参考

/**
 * 排序转换,驼峰命名方法加下划线
 * addTime desc, modifyTime desc,id asc
 * add_time desc,modify_time desc,id asc
 * @param orderByStr
 * @return
 */
public String orderByConvert(String orderByStr){
	String[] orderBys = orderByStr.split(",");
	String sort;
	String order;
	char ch;
	StringBuffer sb = new StringBuffer();
	for(String orderBy : orderBys){
		orderBy = orderBy.trim();
		String[] sortOrders = orderBy.split(" ");
		sort = sortOrders[0];
		order = sortOrders[1];
		for(int i=0; i<sort.length(); i++){
			ch = sort.charAt(i);
			if(Character.isUpperCase(ch)){
				sb.append('_');
				sb.append(Character.toLowerCase(ch));
			} else {
				sb.append(ch);
			}
		}
		sb.append(' ');
		sb.append(order);
		sb.append(',');
	}
	//log.info("---orderByStr:"+orderByStr);
	//log.info("---orderByStr:"+sb.toString());
	if(sb.length()>0){//
		return sb.substring(0, sb.length()-1);
	} else {
		return sb.toString();
	}
}

 

参考:

jquery easyui dataGrid动态改变排序字段名

http://blog.csdn.net/lht0211/article/details/45395637

猜你喜欢

转载自happyqing.iteye.com/blog/2387581