• 고객센터
  • 교육
  • 매뉴얼
  • 데모
  • 제품소개
기술지원31
조회 수 : 1045
2009.10.19 (09:59:27)
OnColumnChanged 이벤트는 컬럼이 변경될 때마다 발생하는데
이벤트 발생 중에 다른 스크립트 함수에서 또 컬럼을 변경해서
동일한 이벤트 함수를 계속 호출해서 문제가 생기는 겁니다.

해결 방법은 이벤트 작동시에 복사 DataSet을 만들어 놓고
복사 DataSet을 변경한 다음에 변경된 내용을 그리드에 옮기던가
아니면 다른 방법을 연구해서 사용하셔야 할 것 같습니다.

가우스 컴포넌트 구조상 이런 형태의 코딩은 불가능합니다.


>게시판을 이용해 주셔서 감사합니다.
>다음양식에 맞게 입력해주세요.
>
>* 고객시스템명 :
>* GAUCE 버전 : 4013
>* WAS 종류(WebLogic 등등) : weblogic
>* DB 종류 : oracle
>* 문의 유형(질문/요청/참조) : Stack OverFlow 에러
>* 내용 :
>
>                                10월   31주   32주  33주
>가전(Total)                 150     70       30     50
>     컴퓨터(Total)         150     70       30     50
>                Tx-4000      100     20       30     50
>                 Sx-1000      50     50        0      0
>
>
>Dataset 은 위처럼 저장되고
>Tx-4000제품의 월 수량을 입력하면 주로 배분되고 제품 주 수량을 수정하면 가전(Total), 컴퓨터(Total)의 수량도 변경되는 로직입니다. 즉  Tx-4000제품의 월 수량을 200으로 수정하면
>
>가전(Total)                 250     90       60     100
>     컴퓨터(Total)         250     90       60     100
>                Tx-4000      200     40       60     100
>                 Sx-1000      50     50        0       0
>
>처럼 변경되는 로직입니다.
>
>아래 소스처럼 입력했을때 datatset의 OnExit(row,colid,olddata) 이벤트를 타고
>월분배=> jsResetMonthDiv 와 월총합계산 => jsResetMonthSum 함수를 타고
>
>상단 Total 합계는 datatset의 OnColumnChanged 이벤트를 타고
>상위 Level 총계를 변경 => jsResetTotalSum 함수를 타도록 개발했습니다.
>
>근데 로직은 다 타고  "Stack Overflow at line:0" 에러가 발생합니다.
>
>아래는 JSP 소스내용입니다.
>
><SCRIPT LANGUAGE="JAVASCRIPT" FOR="das_grid_sales_plan" EVENT="OnColumnChanged(row,colid)" >
><!--
>    var intAddCnt = 0;
>    var arrChgFlagId = new Array();
>    var intChgFlag = 0;
>    var boolFlag = true;
>  
>    if( !colid.substring(0,3) == "CS_" || !colid.substring(0,3) == "CD_"){
>        return;
>    }
>    if( das_grid_sales_plan.NameValue(row,"add_yn" ) == "N"){
>            
>                   for(var j=0; j<=arrChgFlagId.length; j++){
>                           if(arrChgFlagId[j] == colid){
>                                   boolFlag = false;        
>                           }
>                   }                   
>                   if(boolFlag){
>                           if(colid.substring(0,3) == "CD_"){
>                                   if(iCnt%2 != 0){
>                                           jsResetTotalSum( row, colid, intAddCnt, das_grid_sales_plan, grid_sales_plan, "VIEW_SEQ", "01", "FILTER_COLUMN" );
>                                   } else {
>                                           jsResetTotalSum2( row, colid, intAddCnt, das_grid_sales_plan, grid_sales_plan, "VIEW_SEQ", "01", "FILTER_COLUMN" );
>                                   }
>                                   iCnt++;        
>                           }
>                           if(colid.substring(0,3) == "CS_"){
>                                   jsResetTotalSum3( row, colid, intAddCnt, das_grid_sales_plan, grid_sales_plan, "VIEW_SEQ", "01", "FILTER_COLUMN" );
>                           }
>                           
>                           arrChgFlagId[intChgFlag] = colid;
>                           intChgFlag++;
>                   }
>    }
>    
>    das_grid_sales_plan.ResetStatus();
>-->
></SCRIPT>
><SCRIPT LANGUAGE="JAVASCRIPT" FOR="grid_sales_plan" EVENT="OnExit(row,colid,olddata)" >
><!--
>    var intAddCnt = 0;
>    var arrChgFlagId = new Array();
>    var intChgFlag = 0;
>    var boolFlag = true;
>    if( !colid.substring(0,3) == "CS_" || !colid.substring(0,3) == "CD_" || das_grid_sales_plan.NameValue(row,"TFLAG" ) != "D"){
>        return;
>    }
>           if( das_grid_sales_plan.NameValue(row,"add_yn" ) == "N"){
>                   for(var j=0; j<=arrChgFlagId.length; j++){
>                           if(arrChgFlagId[j] == colid){
>                                   boolFlag = false;        
>                           }
>                   }                   
>                   if(boolFlag){
>                        if(colid.substring(0,3) == "CS_"){    
>                                jsResetMonthDiv( row, colid, das_empty_calendar, das_grid_sales_plan, grid_sales_plan);                                
>                        }else if(colid.substring(0,3) == "CD_"){                                 
>                                jsResetMonthSum( row, colid, das_empty_calendar, das_grid_sales_plan, grid_sales_plan);                                
>                        }
>                        arrChgFlagId[intChgFlag] = colid;
>                           intChgFlag++;
>                }
>        }        
>        
>    das_grid_sales_plan.ResetStatus();
>-->
></SCRIPT>
>
>
>그리고 각 실행 함수는 다음과 같습니다.
>=> 상위 총합계를 변경하는 함수
>function jsResetTotalSum( row, colid, intAddCnt, dsObjName, gridObj, strColName, strColValue, strNaviColName ){
>    gridObj.ReDraw = false;
>    
>    var arrNaviColValue = new Array();
>    var strNaviValue    = dsObjName.NameValue(row, strNaviColName);
>    var intOrgValue     = parseInt(dsObjName.OrgNameValue(row,colid));
>    var intAmdValue     = parseInt(dsObjName.NameValue(row,colid));
>    var intCurLevel     = Number(dsObjName.NameValue(row,"T_LEVEL"));
>    
>    for(var i = 1; i <= row; i++ ){
>        var intTotRow = i + intAddCnt;
>        
>        if(dsObjName.NameValue(intTotRow,strColName) == strColValue){
>                var intTotSum       = parseInt(dsObjName.NameValue(intTotRow,colid)) - intOrgValue + intAmdValue;
>                var strCurNaviValue = dsObjName.NameValue(intTotRow, strNaviColName);
>                
>                if(strNaviValue.indexOf(strCurNaviValue) != -1&& intCurLevel == Number(dsObjName.NameValue(i, "T_LEVEL"))+1){                        
>                        dsObjName.NameValue(intTotRow, colid ) =  Math.round(intTotSum);                        
>                        break;
>                }
>               }        
>        }        
>    gridObj.ReDraw = true;
>}
>
>
>
>=> 월합계를 변경하는 함수
>
>function jsResetMonthSum( row, colid, dsCarlenName, dsObjName, gridObj){
>          gridObj.ReDraw = false;
>          var intOrgValue     = parseInt(dsObjName.OrgNameValue(row,colid));
>    var intAmdValue     = parseInt(dsObjName.NameValue(row,colid));
>    var strColid        = colid.substr(3,colid.length);
>    
>    for(var i = 1; i <= dsCarlenName.CountRow; i++ ){
>        var strMonthAscRank  = das_empty_calendar.NameValue(i,"month_asc_rank"  );
>        var strMonCode       = das_empty_calendar.NameValue(i,"m_code");
>        var strWeekCode      = das_empty_calendar.NameValue(i,"h_code");
>        
>        if(strWeekCode == strColid){
>                   var intTotSumM = parseInt(dsObjName.NameValue(row,"CS_"+strMonCode)) - intOrgValue + intAmdValue;
>                  dsObjName.NameValue(row, "CS_"+strMonCode ) =  Math.round(intTotSumM);
>            break;
>        }
>    }
>    gridObj.ReDraw = true;
>}
>
>=> 월을 주로 배분하는 함수
>function jsResetMonthDiv( row, colid, dsCarlenName, dsObjName, gridObj){
>        gridObj.ReDraw = false;
>    
>    var intAmdChgValue  = dsObjName.NameValue(row,colid) - dsObjName.OrgNameValue(row,colid);
>    var strColid        = colid.substr(3,colid.length);
>          var arrChgSum       = new Array();
>          var arrColName      = new Array();
>          var intChgIndex     = 0;
>        
>    for(var i = 1; i <= dsCarlenName.CountRow; i++ ){
>        var strMonthAscRank  = das_empty_calendar.NameValue(i,"month_asc_rank"  );
>        var strMonCode       = das_empty_calendar.NameValue(i,"m_code"          );
>        var strWeekCode      = das_empty_calendar.NameValue(i,"h_code"          );
>        
>        if(strMonCode == strColid){            
>                var intWeek = parseInt(dsObjName.NameValue(row,"CD_"+strWeekCode));
>                var intMonth = parseInt(dsObjName.OrgNameValue(row,"CS_"+strMonCode));
>                var intChgSum = intWeek + (intWeek/intMonth*intAmdChgValue);
>                            
>                            dsObjName.NameValue(row, "CD_"+strWeekCode ) =  Math.round(intChgSum);
>                                        arrChgSum[intChgIndex] = intChgSum;
>                                        arrColName[intChgIndex] = strWeekCode;
>                            
>                            intChgIndex++;                        
>        }
>    }
>    
>    var intRemainSum = 0;
>    for(var j = 0; j < intChgIndex-1; j++){
>            intRemainSum += parseInt(arrChgSum[j]);            
>    }
>    
>    dsObjName.NameValue(row, "CD_"+ arrColName[intChgIndex-1]) =  parseInt(dsObjName.NameValue(row,colid)) - intRemainSum;
>          gridObj.ReDraw = true;
>}
>
>
>
번호 제목 닉네임 조회 등록일
5269 teechat8 컴포넌트가 설치되지 않습니다. 파일
박정우
1361 2009-10-19
5268 teechat8 컴포넌트가 설치되지 않습니다.
관리자
962 2009-10-21
5267 아래 5243번 글에 대한 추가질문입니다.
김한제
904 2009-10-17
5266 아래 5243번 글에 대한 추가질문입니다. 파일
기술지원31
1284 2009-10-19
5265 그리드 체크 박스
정호균
886 2009-10-16
5264 그리드 체크 박스
기술지원31
978 2009-10-19
5263 Stack OverFlow 에러
서지원
998 2009-10-16
Selected Stack OverFlow 에러
기술지원31
1045 2009-10-19
5261 리포트 멀티라인 질문
신태환
813 2009-10-15
5260 리포트 멀티라인 질문
기술지원31
954 2009-10-16
5259 리포트 멀티라인 질문(추가)
신태환
829 2009-10-21
5258 sql server의 image필드 인쇄
허석범
827 2009-10-15
5257 sql server의 image필드 인쇄
기술지원97
844 2009-10-15
5256 sql server의 image필드 인쇄
허석범
895 2009-10-15
5255 sql server의 image필드 인쇄
기술지원97
1301 2009-10-15
5254 라이센스 관련 문의 파일
이정한
1163 2009-10-15
5253 라이센스 관련 문의
기술지원97
995 2009-10-15
5252 GRID에 관한 질문입니다.
배성인
864 2009-10-14
5251 GRID에 관한 질문입니다.
기술지원31
1096 2009-10-14
5250 그리드를 이용해 게시판 만들때...
정호균
1028 2009-10-14
Tag List
XE Login