EasyUI Forum

General Category => EasyUI for jQuery => Topic started by: getk on March 24, 2014, 04:44:04 AM



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:
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());
});


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:
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


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            
Code:
var target = this;
should be             
Code:
var target = $(this);