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 ...
随机推荐
- core文件
1.ulimit -c查看是否可以产生core文件 打印0表示当前不产生core文件 2.ulimit -c unlimited 设置产生core文件 这种方法只是临时设置产生core文件 3.ec ...
- C#动手实践:Kinect V2 开发(1):初步了解及环境搭建
该分享使用的是Kinect 二代,C#做为编程语言,请知悉 Kinect是微软在2009年6月2日的E3游戏展上,正式公布的XBOX360体感周边外设.它是一种3D体感摄影机,同时它导入了即时动态捕捉 ...
- hive 基本语法
本来想讲自己用到的写出来了,结果发现一个比较全面的文章已经介绍过了,那我就不在重新发明轮子了,我也跟着学习一下. 转自:http://jeffxie.blog.51cto.com/1365360/31 ...
- .NET4.5 异步编程 async和await
msdn介绍:https://msdn.microsoft.com/zh-cn/library/hh191443.aspx 其实很简单,标记了async的方法为异步方法,从方法的左大括号开始同步执行, ...
- hadoop 完全分布式 下 datanode无法启动解决方法
问题描述: 在集群模式下更改节点后,启动集群发现 datanode一直启动不起来. 我集群配置:有5个节点,分别为master slave1-5 . 在master以Hadoop用户执行:start- ...
- d3安装异常
使用npm安装D3,发现其工程名和依赖名重复,导致安装异常 http://thisdavej.com/node-newbie-error-npm-refusing-to-install-package ...
- Cookie实现商品浏览记录--方式二:JS实现
使用Cookie实现商品浏览记录:方式二:JS方法实现cookie的获取以及写入.当某一个产品被点击时,触发JS方法.利用JS方法判断一下,此产品是否在浏览记录中.如果不存在,则将产品ID加入到coo ...
- FLAG_ACTIVITY_CLEAR_TOP
看了一篇相关的文章,感觉还不错,链接http://www.cnblogs.com/lwbqqyumidi/p/3775479.html
- .gitignore 使用中注意的问题
在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改 .gitignore 文件的方法.这个文件每一行保存了一个匹配的规则例如: # 此为注释 – 将被 Git 忽略 *.a ...
- Android学习起步 - AutoCompleteTextView及MultiAutoCompleteTextView控件使用
大家在用百度搜索时,输入几个词就出现下拉框可选,以下两个控件就具有这个功能 AutoCompleteTextView:只能匹配输入的开始,只有一次匹配 MultiAutoCompleteTextVie ...