2011-11-11 5 views
1

내 페이지에 그룹화되어 있고 여러 열 (A, B, C, D)이 포함 된 jqGrid가 있습니다. 각 그룹 내의 D 열에 대한 요약 (즉, 전체 행)을 다음과 같이하려면 어떻게해야합니까? sum (D)/Sum (A) * 100?jqGrid - 그룹화 + 사용자 정의 요약 함수

summaryType과 같은 사용자 지정 함수를 정의 할 수 있음을 알고 있습니다. summaryType : mysum하지만 위 공식을 사용하는 방법을 잘 모르겠습니다. 참고로, 열 A, B 및 C는 모두 summaryType이 다음과 같이 설정되어 있습니다. summaryType : 'sum'따라서 내장 된 합산 기능을 사용하여 계산됩니다. 또한 어떻게 든 jqGrid의 loadComplete 이벤트에서 이것을 풀 수 있는지 궁금합니다.

난 다음을 수행함으로써이를 달성하는 데 성공 :

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

확실하지 않다. 다른 제안이 있습니까? 감사.

답변

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를 사용하여 값을 grap하고 c는 저장된 값을 사용하여 백분율을 계산합니다.

1. 셀 값은 수정할 수 :

이 포맷터 이벤트 3 가지를주의하는 것이 중요합니다. 형식 지정 이벤트 일지라도 값이 변경 될 수 있습니다. 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

서버에서 확인하십시오. 훨씬 더 간단 해집니다. 완벽하게 제어 할 수 있습니다.