easyui datagrid 点击列表头排序出现错乱的原因
之前我的导师,也就是带我的同事,使用datagrid,发现点击列表头排序出现乱序,按理说只有顺序和逆序两种排序结果。因为他比较忙,当时没解决,把排序禁掉了,后来又要求一定要排序,所以他交给我。
一开始不知道什么原因,看了别的地方用到datagrid的都没有问题,因为我们这边的datagrid有20列左右,当时没有每一列都测试,只是测试了前面的,基本上都出现乱序,为了简单,删除一些列,然后再测试,发现有一列没问题,仔细分析代码,排序好的列的formatter中,return变量的格式是row.A,而其他不好的列的formatter中return的格式是row.A.B或者row.A.B.C,初步假设是这个导致的,后来参考一篇博客,关于自定义排序,在我们的代码中使用自定义排序,发现排序出错的的列的sorter:function(a,b)
中,a和b的值都是undefine,而排序好的列则是正确的值。排序正确的列在formatter中value是正确的,而排序不对的列在formatter中value为undefine,所以可以确定是row.A.B.C这种方式导致的,后来想在field中写A.B.C,发现也不可以。
一同事说在后台返回的时候增加一个字段,把多级属性变为一级属性,这样就解决了问题,只是这样增加了空间开销,感觉不太好,希望可以找到一种更好的解决方法,也许以后easyui会增加field对多级属性的支持。刚好找到一篇文章(参考http://blog.csdn.net/jianyi7659/article/details/9736871),说field不支持属性带子属性的格式,博客中说用修改jquery.easyui.min.js中第8670行:
//var _644=_641[_643];
var _644=eval("_641['"+_643.replace(/\./g,"']['")+"']");
发现点击排序还是乱序,不过在jquery.easyui.min.js文件测试,发现field中用A.B.C可以得到值,但是sorter:function(a,b) 中,a和b的值都还是undefine,后来想到,如果找到sort函数的源代码,然后确保a和b取到值,应该就可以了,所以找到
data.rows.sort(function(r1,r2){
return _51e(r1[opts.sortName],r2[opts.sortName])*(opts.sortOrder=="asc"?1:-1);
});
},
修改为如下,
data.rows.sort(function (r1, r2) {
var r1data = eval("r1['"+opts.sortName.replace(/\./g,"']['")+"']");
var r2data = eval("r2['"+opts.sortName.replace(/\./g,"']['")+"']");
return _51e(r1data, r2data) * (opts.sortOrder == "asc" ? 1 : -1);
});
},
测试发现排序就正确了,不过对于日期排序还是不准确,但这不是因为undefined值引起的,而是由于值存在一些特殊字符,比如说空格和斜杠等引起的,可以自定义排序函数实现。
easyui datagrid 点击列表头排序出现错乱的原因的更多相关文章
- JQuery easyUI DataGrid 创建复杂列表头(译)
» Create column groups in DataGrid The easyui DataGrid has ability to group columns, as the followin ...
- [WPF]ListView点击列头排序功能实现
[转] [WPF]ListView点击列头排序功能实现 这是一个非常常见的功能,要求也很简单,在Column Header上显示一个小三角表示表示现在是在哪个Header上的正序还是倒序就可以了. ...
- MFC listcontrol 分列 添加行数据 点击列头排序
适用于 对话框程序 1.在工具箱中拖出 ListControl,然后右键-属性,view-Report 让你的ListControl变成这幅模样! 2.添加ListControl控件的control类 ...
- C#:ListView控件如何实现点击列表头进行排序?
using System; using System.Collections; using System.Windows.Forms; namespace Common { /// <summa ...
- easyui datagrid 点击表头的事件
在用datagrid的时候我们可能要用到点击表头来触发一个function,这里有个简单的例子. 首先你得有个能用的datagrid. <div> <table id=&quo ...
- C++ 简单实现MFC ListControl 点击列头排序
说明: SetItemData可以为每一行绑定一个DWORD类型的变量.用GetItemData可以获得这个变量.举个例子,假设CListCtrl中你需要显示某个数据表中的记录,该表有个流水号主键ID ...
- 【转】 jquery easyui datagrid使用,分页、排序、查询
$('#dg').datagrid({ url: "xxx.ashx", pagination: true, p ...
- WPF DataGrid点击列头选择全列并具有背景色
完成这个操作,主要是XAML的代码. 主要思路是通过绑定多路数据,在多路转换器中返回布尔值,在通过数据触发器来设置被选择的全列的背景色. XAML页面主要代码 首先定义DataGridCell < ...
- datagrid点击标题进行排序
步骤: 1.页面上首先设置datagrid的AllowSorting="true",以及指定排序方法OnSortCommand="DataGrid1_SortComman ...
随机推荐
- My Interface
一.创建Myinterface接口 public interface Myinterface { static final String MyifName="我的接口"; stat ...
- myeclipse2015CI Server显示derby服务器去除方法
找到myeclipse的安装目录 myeclipse2015CI\configuration\org.eclipse.equinox.simpleconfigurator 打开文件bundles.in ...
- 多个Python环境的构建:基于virtualenv 包
假如一台计算中安装多个Python版本,而不同版本可能会pip安装不同的包,为了避免混乱,可以使用virtualenv包隔离各个Python环境,实现一个Python版本对应一套开发环境. 本地概况: ...
- Kafka集群配置说明
#kafka数据的存放地址,多个地址的话用逗号分 log.dirs=/tmp/kafka-logs #broker server服务端口 port=9092 #这个参数会在日志segment没有达到l ...
- Codeforces 730I [费用流]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给两行n个数,要求从第一行选取a个数,第二行选取b个数使得这些数加起来和最大. 限制条件是第一行选取了某个数的条件下,第二行不能选取对应位置的数. ...
- 没想到cnblog也有月经贴,其实C#值不值钱不重要。
呵呵,就不倚老卖老了,从basic走过来,一路经历vb,vf,delphi,C#,php,asp,html,js,css,太多太多的开发语言,包括面向对象编程思想,语义化页面结构等等,除了高级的编程技 ...
- IIS 平台NET无后缀名伪静态实现办法
使用URLRewrite重写链接地址时,当无后缀时,总是找不到文件,不能使用.例如:http://shop.iccoo.cn/7648/ 无后缀形式(当然这个是可以的啦,只是看下链接形式) 当有后缀时 ...
- PHP类型转换
php代码 <?php$foo = "0"; // $foo 是字符串 (ASCII 48)var_dump($foo) ; echo '<br/>'; $foo ...
- vs2008主题
http://www.cnblogs.com/xiaoshatian/archive/2009/11/20/1606440.html
- HDP 2.3 Notes
Hortonworks Data Platform 2.3.4.0-3485 [bug] /usr/hdp/2.3.4.0-3485/zookeeper/bin/zkEnv.sh 26 if [ -z ...