<script type="text/javascript" language="javascript">
var gridClientID = '<%= grid.ClientID %>';
//浮点加法
function accAdd(arg1, arg2) {
var r1, r2, m;
try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
m = Math.pow(10, Math.max(r1, r2))
return (arg1 * m + arg2 * m) / m
}
//合计函数Begin
function GridSum(grid) {
var sum1 = 0;
var sum2 = 0;
var sum3 = 0;
var sum4 = 0;
var sum5 = 0;
var sum6 = 0;
//...有几个列需要合计就声明几个变量
grid.store.each(function(record) { //函数grid.store.each(record))相当于一个for循环,遍历整个record
sum1 = accAdd(record.data["test1"], sum1); //把test1列下面的所有值进行加和运算,注意点:test1是该列ColumnID属性 例:<ext:BoundField Width="70px" DataField="XXXXX" HeaderText="测试" TextAlign="Center" ColumnID="test1" />
sum2 = accAdd(record.data["test2"], sum2); //把test2列下面的所有值进行加和运算
sum3 = accAdd(record.data["test3"], sum3);
sum4 = accAdd(record.data["test4"], sum4);
sum5 = accAdd(record.data["test5"], sum5);
sum6 = accAdd(record.data["test6"], sum6);
});
//sum1 = addComma(sum1);
var p = new Ext.data.Record(
{
"OrderDateField": '合计',
"test1": sum1, //把test1列与合计后得到的值对应起来
"test2": sum2, //把test2列与合计后得到的值对应起来
"test3": sum3,
"test4": sum4,
"test5": sum5,
"test6": sum6
}
);
//grid.store.insert(0, p); // 插入到当前页的第一行
grid.store.insert(grid.getStore().getCount(), p); //插入到当前页的最后一行,函数 grid.getStore().getCount()用来获得当前页的记录行数
//具体放哪一行 自己选择
//改变改行颜色。。。。。。。。x-grid-cell-inner为CSS样式 大家自己写就行了
var row = grid.getView().getRow(grid.getStore().getCount() - 1);
Ext.get(row).first().addClass("x-grid-cell-inner");
}
//合计函数End
// 页面第一个加载完毕后执行的函数
function onReady() {
var grid = X(gridClientID);
grid.addListener('viewready', function() {
GridSum(grid);
});
}
// 页面AJAX回发后执行的函数
function onAjaxReady() {
var grid = X(gridClientID);
GridSum(grid);
}
</script>
在分页时,或者绑定行有触发OnRowCommand时。都会触发onAjaxReady这个JS 大家自己做个变量来控制把 防止合计重复加上去了 具体问题具体解决! |