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