2011-11-11 55 views
1

グループ化され、いくつかの列(A、B、C、D)を含むページにjqGridがあります。各グループ内の列Dの要約(合計行)を、以下のようにするにはどうすればよいですか?合計(D)/合計(A)* 100?jqGrid - グループ化+カスタム集計型関数

summaryType:mysumのようなカスタム関数を定義することができますが、私は上記の公式を行うためにこれをどのように使うことができますか?注意:列A、B、およびCはすべて、summaryType: 'sum'のようにsummaryTypeを設定しているため、組み込みの集計機能を使用して計算されます。私は何とかjqGridのloadCompleteイベントでこれを取り除くことができるかどうかも疑問です。

私は、次の手順を実行して、これを達成するために管理:

私は、私の機能に続いて

var tColA = 0.0; 

var tColD = 0.0; 

var tCurrentGroupBy; 

で列Aと列Cの現在値、および現在のグループのグローバル変数を定義私は次のようにします:

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

これはもっと良い方法があるかどうかわかりませんが、これはうまくいくようです。他の提案はありますか?ありがとう。

答えて

2
少し遅れて

、しかし...私は列B.に関して、列Cの個々の割合を示し、列Dは、だから私は「%」記号を追加するフォーマッタを実装しましたている

〜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

パーセント計算に含まれる各セルにこのフォーマッタ関数を配置します。 この例では、セル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> 
0

サーバーで実行します。それははるかに簡単になります、あなたは完全な制御を持っています。

関連する問題