场景如下:
我们在表格中经常添加一行为统计行,统计具体列的相关和,这时候用户在使用的时候,发现有效数据与分页栏中展示的总个数不一致,会造成困惑。
产生原因:easyuigrid一般在表格加载onloadSuccess 函数中以insertRow 或者appendRow 函数来追加统计行
代码如下:
onLoadSuccess:function(data,index){
var rows = $('#rptDay').datagrid('getRows')//获取当前的数据行
var txcount = 0//计算txcount的总和
for (var i = 0; i < rows.length; i++) {
txcount += parseFloat(rows[i]['txcount']);
}
//新增一行显示统计信息
//toFixed(2) 精度
$('#rptDay').datagrid('appendRow', {rptdate:'合计',orgname:'',txcount: txcount.toFixed(2)});
}
那么这时候datagrid分页总数就多了一行,查看源代码如下:
#jquery.datagrid.js中 datagridappendrow方法
appendRow:function(jq,row){
return jq.each(function(){
_18d(this,row);
});
function _18d(_18e,row){
var data=$.data(_18e,"datagrid").data; # 获取加载成功后的数据集合 此时把合计行算入
var view=$.data(_18e,"datagrid").options.view;
var _18f=$.data(_18e,"datagrid").insertedRows;
view.insertRow.call(view,_18e,null,row);
_18f.push(row);
$(_18e).datagrid("getPager").pagination("refresh",{total:data.total});#在此处刷新分页栏中的分页总数
};
由源码中可以得知,在datagrid加载完成后,重新渲染分页栏相关信息,那么此时要把统计行从总分页数中减去则需要在onloadSuccess 函数中添加如下处理:
onLoadSuccess:function(data,index){
var rows = $('#rptDay').datagrid('getRows')//获取当前的数据行
#获取统计行追加前的总行数
var oldRows=parseInt(rows.length);
var txcount = 0//计算txcount的总和
for (var i = 0; i < rows.length; i++) {
txcount += parseFloat(rows[i]['txcount']);
}
//新增一行显示统计信息
//toFixed(2) 精度
$('#rptDay').datagrid('appendRow', {rptdate:'合计',orgname:'',txcount: txcount.toFixed(2)});
#在追加行后重新渲染分页栏
$('#rptDay').datagrid("getPager").pagination("refresh",{total:oldRows});
}
当然这只是针对个性化需要,不是必要。