EasyUI datagrid增加统计当前页中某列的最大值,最小值,平均值,总和

 

一、扩展方法

/*
quber:
    EasyUI datagrid增加统计当前页中某列的最大值,最小值,平均值,总和
    使用方法:
    onLoadSuccess : function() {
        $('#dg').datagrid('statistics');
    }

    列属性中加入:sum: true, sumCol: 'Capacity', avg: true, avgCol: 'Capacity', max: true, maxCol: 'Capacity', min: true, minCol: 'Capacity'
    sumCol:"合计"标题显示的列名称
    ……
 */
$.extend($.fn.datagrid.methods, {
    statistics: function (jq) {
        var opt = $(jq).datagrid('options').columns;
        var rows = $(jq).datagrid("getRows");

        var footer = new Array();
        footer['sum'] = "";
        footer['avg'] = "";
        footer['max'] = "";
        footer['min'] = "";

        var sumCol = '',
            avgCol = '',
            maxCol = '',
            minCol = '';

        for (var i = 0; i < opt[0].length; i++) {
            if (opt[0][i].sumCol) sumCol = opt[0][i].sumCol;
            if (opt[0][i].avgCol) avgCol = opt[0][i].avgCol;
            if (opt[0][i].maxCol) maxCol = opt[0][i].maxCol;
            if (opt[0][i].minCol) minCol = opt[0][i].minCol;

            if (opt[0][i].sum) {
                footer['sum'] = footer['sum'] + sum(opt[0][i].field) + ',';
            }
            if (opt[0][i].avg) {
                footer['avg'] = footer['avg'] + avg(opt[0][i].field) + ',';
            }
            if (opt[0][i].max) {
                footer['max'] = footer['max'] + max(opt[0][i].field) + ',';
            }
            if (opt[0][i].min) {
                footer['min'] = footer['min'] + min(opt[0][i].field) + ',';
            }
        }

        var footerObj = new Array();
        var tmp, obj;
        if (footer['sum'] != "") {
            tmp = '{' + footer['sum'].substring(0, footer['sum'].length - 1) + "}";
            obj = eval('(' + tmp + ')');
            if (sumCol.length > 0) obj[sumCol] = '合计';
            footerObj.push(obj);
        }

        if (footer['avg'] != "") {
            tmp = '{' + footer['avg'].substring(0, footer['avg'].length - 1) + "}";
            obj = eval('(' + tmp + ')');
            if (avgCol.length > 0) obj[avgCol] = '平均值';
            footerObj.push(obj);
        }

        if (footer['max'] != "") {
            tmp = '{' + footer['max'].substring(0, footer['max'].length - 1) + "}";
            obj = eval('(' + tmp + ')');
            if (maxCol.length > 0) obj[maxCol] = '最大值';
            footerObj.push(obj);
        }

        if (footer['min'] != "") {
            tmp = '{' + footer['min'].substring(0, footer['min'].length - 1) + "}";
            obj = eval('(' + tmp + ')');
            if (minCol.length > 0) obj[minCol] = '最小值';
            footerObj.push(obj);
        }

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

        function sum(filed) {
            var sumNum = 0;
            for (var i = 0; i < rows.length; i++) {
                sumNum += Number(rows[i][filed]);
            }
            return '"' + filed + '":"' + sumNum.toFixed(2) + '"';
        };

        function avg(filed) {
            var sumNum = 0;
            for (var i = 0; i < rows.length; i++) {
                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) {
                    max = Number(rows[i][filed]);
                } else {
                    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) {
                    min = Number(rows[i][filed]);
                } else {
                    min = Math.min(min, Number(rows[i][filed]));
                }
            }
            return '"' + filed + '":"' + min + '"';
        }
    }
});

二、修改源码

找到源码datagrid的列属性,可搜索 var col = $.extend({}, $.parser.parseOptions(this 关键字定位,然后添加 "sum","sumCol""avg","avgCol""max","maxCol""min","minCol" 这几个属性,如下图所示:

EasyUI datagrid增加统计当前页中某列的最大值,最小值,平均值,总和 - Quber - Quber

 

三、使用方法

 

在加载成功方法中调用:

onLoadSuccess: function () {
    $('#dg').datagrid('statistics');
},

设置列统计属性:

field: 'Price', title: '价格', width: 200, sum: true, sumCol: 'Capacity', avg: true, avgCol: 'Capacity', max: true, maxCol: 'Capacity', min: true, minCol: 'Capacity'

最终效果如下图所示:

EasyUI datagrid增加统计当前页中某列的最大值,最小值,平均值,总和_第1张图片

 

你可能感兴趣的:(EasyUI,js,前端)