Title: Datagrid client sort not properly working with pagination
Post by: getk on March 24, 2014, 04:44:04 AM
hi folks, I've been using easyUI and works pretty good. I had a problem recently whereby the number of rows exceeded >50 and went outside one page. (my pagination limit is 50 rows per page). When I tried sorting (I'm using client sort and NOT remote sort), it sorted the data only present in the current page and NOT all the data. I'm using EasyUI v1.3.3
Any fix for it? (i.e. Sort the whole data rather than sort from just the page)
Cheers
Title: Re: Datagrid client sort not properly working with pagination
Post by: stworthy on March 24, 2014, 06:47:23 AM
Please try the filter code below: function pagerFilter(data){ if (typeof data.length == 'number' && typeof data.splice == 'function'){ // is array data = { total: data.length, rows: data } } var dg = $(this); var opts = dg.datagrid('options'); var pager = dg.datagrid('getPager'); pager.pagination({ onSelectPage:function(pageNum, pageSize){ opts.pageNumber = pageNum; opts.pageSize = pageSize; pager.pagination('refresh',{ pageNumber:pageNum, pageSize:pageSize }); dg.datagrid('loadData',data); } }); if (!data.originalRows){ data.originalRows = (data.rows); } if (!opts.remoteSort && opts.sortName){ var target = this; var names = opts.sortName.split(','); var orders = opts.sortOrder.split(','); data.originalRows.sort(function(r1,r2){ var r = 0; for(var i=0; i<names.length; i++){ var sn = names[i]; var so = orders[i]; var col = $(target).datagrid('getColumnOption', sn); var sortFunc = col.sorter || function(a,b){ return a==b ? 0 : (a>b?1:-1); }; r = sortFunc(r1[sn], r2[sn]) * (so=='asc'?1:-1); if (r != 0){ return r; } } return r; }); } var start = (opts.pageNumber-1)*parseInt(opts.pageSize); var end = start + parseInt(opts.pageSize); data.rows = (data.originalRows.slice(start, end)); return data; }
Apply this filter code to a datagrid. $(function(){ $('#dg').datagrid({loadFilter:pagerFilter}).datagrid('loadData', getData()); });
Title: Re: Datagrid client sort not properly working with pagination
Post by: zh_CN on March 24, 2014, 06:55:17 AM
Please try the filter code below: function pagerFilter(data){ if (typeof data.length == 'number' && typeof data.splice == 'function'){ // is array data = { total: data.length, rows: data } } var dg = $(this); var opts = dg.datagrid('options'); var pager = dg.datagrid('getPager'); pager.pagination({ onSelectPage:function(pageNum, pageSize){ opts.pageNumber = pageNum; opts.pageSize = pageSize; pager.pagination('refresh',{ pageNumber:pageNum, pageSize:pageSize }); dg.datagrid('loadData',data); } }); if (!data.originalRows){ data.originalRows = (data.rows); } if (!opts.remoteSort && opts.sortName){ var target = this; var names = opts.sortName.split(','); var orders = opts.sortOrder.split(','); data.originalRows.sort(function(r1,r2){ var r = 0; for(var i=0; i<names.length; i++){ var sn = names[i]; var so = orders[i]; var col = $(target).datagrid('getColumnOption', sn); var sortFunc = col.sorter || function(a,b){ return a==b ? 0 : (a>b?1:-1); }; r = sortFunc(r1[sn], r2[sn]) * (so=='asc'?1:-1); if (r != 0){ return r; } } return r; }); } var start = (opts.pageNumber-1)*parseInt(opts.pageSize); var end = start + parseInt(opts.pageSize); data.rows = (data.originalRows.slice(start, end)); return data; }
Apply this filter code to a datagrid. $(function(){ $('#dg').datagrid({loadFilter:pagerFilter}).datagrid('loadData', getData()); });
hi, my trouble[Bug Report]:http://www.jeasyui.com/forum/index.php?topic=3086.0
Title: Re: Datagrid client sort not properly working with pagination
Post by: getk on March 24, 2014, 08:31:51 AM
Please try the filter code below:
You are hero stworthy !! Worked like a charm. PS: Only small typo was Instead of should be
|