1

我的页面上有一个 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);
 }

不确定是否有更好的方法可以做到这一点,但这似乎有效。还有其他建议吗?谢谢。

4

3 回答 3

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");
}

我希望这仍然有帮助。

于 2012-09-03T19:24:56.240 回答
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>
于 2013-11-14T16:58:54.107 回答
0

在服务器上进行。它会简单得多,您将拥有完全的控制权。

于 2015-07-22T19:01:40.700 回答