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 +""";
}
}
});
- 上一篇: easyui 表格底部加合计
- 下一篇: datagrid中添加合计行计算合计