我的页面上有一个jqGrid,它有分组并包含多个列(A,B,C,D)。如何使每组中D列的摘要(即总行)如下:sum(D)/ Sum(A)* 100?
我知道我可以为summaryType定义一个自定义函数,例如:summaryType:mysum但是我不太确定,我怎么能用它来做上面的公式?注意,列A,B和C都具有summaryType设置如下:summaryType:'sum',因此它们使用内置求和功能进行计算。我也想知道我是否可以在jqGrid的loadComplete事件上以某种方式解决这个问题?
我设法通过以下方式实现了这一目标:
我为列A和列C的当前值定义全局变量,并按
定义当前组var tColA = 0.0;
var tColD = 0.0;
var tCurrentGroupBy;
然后在我的函数中,我执行以下操作:
function mysum(a, b, c) {
if (tCurrentGroupBy!= c.GroupByCol) {
tColA= 0.0;
tColD = 0.0;
tCurrentGroupBy= c.GroupByCol;
tColA= tColA + parseFloat(c.ColA);
tColD = tColD + parseFloat(c.ColD);
}
else {
tColA= tColA + parseFloat(c.ColA);
tColD = tColD + parseFloat(c.ColD);
}
return ((tColD / tColA) * 100);
}
不确定是否有更好的方法来做到这一点,但这似乎有效。还有其他建议吗?感谢。
答案 0 :(得分:2)
有点晚了,但是......
我有一个D列,它显示了C列相对于B列的个别百分比。所以我实现了一个格式化程序,它将'%'符号添加到D列。 A列是标识符。
但格式化程序功能也应用于摘要行。因此格式化程序检测它是否是摘要行,如果是,则执行计算并返回值。
function percentage_format(cellValue, options, rowObject) {
var a=$(rowObject).attr('A');
if(!a || a='')
cellValue=Math.round($(rowObject).attr('C')*10000/$(rowObject).attr('B'))/100;
return "<span originalValue='"+cellValue+"'>"+cellValue+" %"+"</span>";
}
function unformatCampo(cellValue, options, cellObject) {
return $(cellObject.html()).attr("originalValue");
}
我希望这仍有帮助。
答案 1 :(得分:1)
将此格式化程序功能放在百分比计算中涉及的每个单元格上。 在此示例中,单元格a,单元格b和单元格c需要格式化程序功能。 该函数在a和b中绘制值,在c上使用保存的值来计算百分比。
重要的是要注意格式化程序事件的3件事:
1.单元格值可以修改。即使它是格式化事件,也可能会更改值。 2.事件在订单或列模型中触发 3.虽然rwdat是行数据,但它只是格式化程序的列模型,而不是整行。这就是为什么函数需要在每个单元格上获取所有值。
<script>
var cnt = 0;
var a = 0.0;
var b= 0.0;
function linePercent(cellval, opts, rwdat, act)
{
// rowed==”” means it’s a summary line(total)
if (opts.rowId =="")
{
// save the 2 values used in the calculation
if (rwdat.nm == "a"){totexec=cellval;}
if (rwdat.nm == "b"){planamt=cellval;}
// when the calculated cell is formatted, perform the calculation and set cellval
if (rwdat.nm == "c"){cellval=(a/b)*100;}
}
// call formatter to format cellval
return $.fn.fmatter('number', cellval,opts, rwdat, act);
};
</script>
答案 2 :(得分:0)
在服务器上执行此操作。它会更简单,你可以完全控制。