EasyUI Forum
May 02, 2024, 04:47:04 AM *
Welcome, Guest. Please login or register.

Login with username, password and session length
News:
 
   Home   Help Search Login Register  
Pages: [1]
  Print  
Author Topic: Datagrid client sort not properly working with pagination  (Read 15195 times)
getk
Newbie
*
Posts: 23


View Profile
« 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
« Last Edit: March 24, 2014, 05:41:52 AM by getk » Logged
stworthy
Administrator
Hero Member
*****
Posts: 3581


View Profile Email
« Reply #1 on: March 24, 2014, 06:47:23 AM »

Please try the filter code below:
Code:
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.
Code:
$(function(){
$('#dg').datagrid({loadFilter:pagerFilter}).datagrid('loadData', getData());
});
Logged
zh_CN
Newbie
*
Posts: 32



View Profile Email
« Reply #2 on: March 24, 2014, 06:55:17 AM »

Please try the filter code below:
Code:
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.
Code:
$(function(){
$('#dg').datagrid({loadFilter:pagerFilter}).datagrid('loadData', getData());
});

hi, my trouble[Bug Report]:http://www.jeasyui.com/forum/index.php?topic=3086.0
Logged

From the great China
getk
Newbie
*
Posts: 23


View Profile
« Reply #3 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            
Code:
var target = this;
should be             
Code:
var target = $(this);
« Last Edit: March 24, 2014, 08:48:35 AM by getk » Logged
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines Valid XHTML 1.0! Valid CSS!