给grid加上 合计行
Max 发布于19月前 4答/600阅

我的原始需求是:给grid加上 合计行


实现过程

1.给对象添加依赖js

2.在js文件中对 grid 的 onLoadSuccess 事件,用appendRow方法 在grid最后添加合计行

3.代码

$(document).ready(function() {

var grid=$("#grid");

grid.datagrid({

onLoadSuccess: function(index,field,value){

var data=grid.datagrid('getData').rows;

var price=0;

var quantity=0;

for(j = 0; j < data.length; j++) {

price+=data[j].price;

quantity+=data[j].quantity;

grid.datagrid('appendRow',{

stock: '合计',

price: price,

img:'',

quantity: quantity

});

}

});

});

4.效果






[沙发] 亮李2011
@Max 前端大神,提个小建议,直接set一下显示行数为总数据行,这样就一页能看到合计了。哈哈哈
[地板] Max
@亮李2011 你帮我找了个bug啊,我这个统计当前页的总数,显示的不是真正的合计。。。
[地毯] 寒塘孤雁
@Max 给你推荐一个方案,分两步:
1. 修改com.eova.widget.grid.GridController#query,拼接json处改为如下形式:
String json = JsonKit.toJson(page.getList());
json = "{\"total\":" + page.getTotalRow() + ",\"rows\":" + json;
Kv[] sum = getAttr(CommonValues.DATAGRID_SUM);
if (sum != null) {
json += ",\"footer\":" + JsonKit.toJson(sum);
}
json += "}";
2. 元对象拦截器中定义queryAfter,计算合计行,设置到ctrl.attr:
Kv sum = Kv.create()
.set("time", "合计")
.set(AMOUNT, amount)
.set(AMOUNT_CHECKED, amountChecked)
.set(AMOUNT_UNCHECKED, amountUnchecked);
ac.ctrl.setAttr(CommonValues.DATAGRID_SUM, new Kv[]{sum});
[4楼] Max
多谢指点,去看了GridController,了解了具体查询的拼装流程,
我这里的问题是如果总记录数是100,当前分页只查询出15,出现的合计价格就是当前页面15条记录的合计,会对用户造成误解,所以每次查询都需要全部结果

尝试了在对象上面添加依赖 js,然后对 onBeforeLoad 事件添加
var pager = $("#grid").datagrid("getPager");
pager.pagination({
pageSize: 5,//每页显示的记录条数,默认为10
pageList: [5]
});
的方法,发现第一次load的时候无法生效,第二次才开始起作用,

现在使用暴力方案临时解决的 修改grid.tag
根据objectCode判断是否分页 解决合计只统计当前分页的bug
if(objectCode=='v_order_sku_preview'){
isPaging=false;
}
效果就是不做分页显示所有,最后一行加上合计
提交评论