datagrid 当前页面统计合计等在Footer页脚。


如下是效果图:三行的平均值,合计等计算


$.extend($.fn.datagrid.methods, {           //extend 用来新增datagrid 的方法,名字为statistics
    statistics: function (jq) {
     debugger;
        var opt=$(jq).datagrid('options').columns; //获得所有列的信息,如下图所示:


        var rows = $(jq).datagrid("getRows");   //获得行信息,如下图所示:
         
        var footer = new Array();
        footer['sum'] = "";
        footer['avg'] = "";
        footer['max'] = "";
        footer['min'] = "";

//执行完上述语句之后如下图所示:


         
        for(var i=1; i<opt[0].length; i++){
         sum(opt[0][i].field);
          console.log(opt[0][i].sum);
            if(sum(opt[0][i].field)){
                footer['sum'] = footer['sum'] + sum(opt[0][i].field)+ ',';
                console.log(sum(opt[0][i].field));
            }
            if(avg(opt[0][i].field)){
                footer['avg'] = footer['avg'] + avg(opt[0][i].field)+ ',';
            }
            if(max(opt[0][i].field)){
                footer['max'] = footer['max'] + max(opt[0][i].field)+ ',';
            }
            if(min(opt[0][i].field)){
                footer['min'] = footer['min'] + min(opt[0][i].field)+ ',';

//执行完上述语句,结果如下图:


            }
        }
 
        var footerObj = new Array();
        
        if(footer['sum'] != ""){
            var tmp = '{' + footer['sum'].substring(0,footer['sum'].length - 1) + "}";


            var obj = eval('(' + tmp + ')');

 


            if(obj[opt[0][0].field] == undefined){//opt[0][0].field值时itemid,之前计算时,没有算第一列,所以这里obj里取itemid是undefined
                footer['sum'] += '"' + opt[0][0].field + '":"<b>当页合计:</b>"';//计算合计的一行里添加之前未计算的第一列为“当页合计”的标签
                obj = eval('({' + footer['sum'] + '})');
            }else{
                obj[opt[0][0].field] = "<b>当页合计:</b>" + obj[opt[0][0].field];
            }
            footerObj.push(obj);//最后为datagrid的reloadFooter函数拼凑一个json


        }
        
        if(footer['avg'] != ""){
            var tmp = '{' + footer['avg'].substring(0,footer['avg'].length - 1) + "}";
            var obj = eval('(' + tmp + ')');
            if(obj[opt[0][0].field] == undefined){
                footer['avg'] += '"' + opt[0][0].field + '":"<b>当页均值:</b>"';
                obj = eval('({' + footer['avg'] + '})');
            }else{
                obj[opt[0][0].field] = "<b>当页均值:</b>" + obj[opt[0][0].field];
            }
            footerObj.push(obj);
        }
        
        if(footer['max'] != ""){
            var tmp = '{' + footer['max'].substring(0,footer['max'].length - 1) + "}";
            var obj = eval('(' + tmp + ')');
            
            if(obj[opt[0][0].field] == undefined){
                footer['max'] += '"' + opt[0][0].field + '":"<b>当页最大值:</b>"';
                obj = eval('({' + footer['max'] + '})');
            }else{
                obj[opt[0][0].field] = "<b>当页最大值:</b>" + obj[opt[0][0].field];
            }
            footerObj.push(obj);
        }
        
        if(footer['min'] != ""){
            var tmp = '{' + footer['min'].substring(0,footer['min'].length - 1) + "}";
            var obj = eval('(' + tmp + ')');
            
            if(obj[opt[0][0].field] == undefined){
                footer['min'] += '"' + opt[0][0].field + '":"<b>当页最小值:</b>"';
                obj = eval('({' + footer['min'] + '})');
            }else{
                obj[opt[0][0].field] = "<b>当页最小值:</b>" + obj[opt[0][0].field];
            }
            footerObj.push(obj);


        }
        
        
        
        if(footerObj.length > 0){
            $(jq).datagrid('reloadFooter',footerObj);

//如下代码是reloadFooter的easyui的源码

/*

reloadFooter:function(jq,_5d1){
return jq.each(function(){
var opts=$.data(this,"datagrid").options;
var dc=$.data(this,"datagrid").dc;
if(_5d1){
$.data(this,"datagrid").footer=_5d1;//_51d就是$(jq).datagrid('reloadFooter',footerObj); 的footerObj
}
if(opts.showFooter){//当showFooter为true时,进行展示渲染
opts.view.renderFooter.call(opts.view,this,dc.footer2,false);
opts.view.renderFooter.call(opts.view,this,dc.footer1,true);
if(opts.view.onAfterRender){
opts.view.onAfterRender.call(opts.view,this);
}
$(this).datagrid("fixRowHeight");
}
});
}

*/
        }
        
        
        function sum(filed){
            var sumNum = 0;
            for(var i=0;i<rows.length;i++){
             if(isNaN(Number(rows[i][filed])))
              continue;
                sumNum += Number(rows[i][filed]);
            }
            return '"' + filed + '":"' + sumNum.toFixed(2) +'"';
        };
        
        function avg(filed){
            var sumNum = 0;
            for(var i=0;i<rows.length;i++){
             if(isNaN(Number(rows[i][filed])))
              continue;
                sumNum += Number(rows[i][filed]);
            }
            return '"' + filed + '":"'+ (sumNum/rows.length).toFixed(2) +'"';
        }
 
        function max(filed){
            var max = 0;
            for(var i=0;i<rows.length;i++){
                if(i==0){
                 if(isNaN(Number(rows[i][filed])))
                  continue;
                    max = Number(rows[i][filed]);
                }else{
                 if(isNaN(Number(rows[i][filed])))
                  continue;
                    max = Math.max(max,Number(rows[i][filed]));
                }
            }
            return '"' + filed + '":"'+ max +'"';
        }
        
        function min(filed){
            var min = 0;
            for(var i=0;i<rows.length;i++){
                if(i==0){
                 if(isNaN(Number(rows[i][filed])))
                  continue;
                    min = Number(rows[i][filed]);
                }else{
                 if(isNaN(Number(rows[i][filed])))
                  continue;
                    min = Math.min(min,Number(rows[i][filed]));
                }
            }
            return '"' + filed + '":"'+ min +'"';
        }
    }
});


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值