欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jquery easyui dataGrid动态改变排序字段名,排序列名不一致 博客分类: jQuery easyui easyuidataGrid排序列名不一致 

程序员文章站 2024-03-23 09:18:52
...

 

如果属性名是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