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