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 ...
随机推荐
- java基础-servlet-1
servlet,是运行于服务器端的小程序.它既可以运行在http服务器端,也可以运行在mail等其他服务器端.我是这样理解,tomcat把接收到的客户端请求,转发给servlet,它负责业务处理,并且 ...
- 黄聪:如何为IIS增加svg和woff等字体格式的MIME
现在字体图标已经渐渐代替了图片了,移动端用起来也很方便. 使用了字体文件来显示矢量的图标,为了能在IIS上正常显示图标,可以通过增加iis的MIME-TYPE来支持图标字体文件 下面就把IIS增加sv ...
- Eclipse IDE for Java EE Developers 与 Eclipse Classic(Eclipse Standard)区别
Eclipse下载官网:http://www.eclipse.org/downloads/ 版本: 1.Eclipse classic(Eclipse Standard):Eclipse的标准版; 2 ...
- 树莓派3B 安装微雪LCD5inch显示器(包含软键盘)
树莓派单独使用时,往往需要触摸屏和软键盘用以方便操作,微雪LCD显示器就能较好的实现这个功能, 正好实验室又买入了一个3B的板子和一个5inch的显示器,便对着官方的安装手册,亲自安装了一次. 一:材 ...
- 燕十八MySQL优化学习笔记
观察 show status; 里面的这三个参数;Queries Threads_connected Threads_running判断周期性变化 -------------------------- ...
- 每天一个 Linux 命令(14):head 命令
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾. 1.命令格式: hea ...
- Django 之 models的 F() 和 Q() 函数
前提: app名称为core,models.py 如下: #coding: utf8 import datetime from django.db import models class Order( ...
- firefox火狐浏览器过滤广告插件:Adblock Plus
firefox火狐浏览器过滤广告插件:Adblock Plus
- hmtl弹出框样式
@model Web.Manager.Models.SendMessage @{ ViewBag.Title = "消息发布"; Layout = null;} <link ...
- 成功部署SSIS中含有Oracle数据库连接的ETL包
RT,正式写之前,我想说,真TMD不容易!!! 写博客,责任心,很重要 在百度搜出来的内地博客技术文章(CSDN.ITEYE.CNBLOGS……),大部分都是不全面,只针对一个遇到的问题点的记录,可以 ...