ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Miplatform TreeView에서 자식(자손)여부 파악 및 체크박스 제어
    ♣ Tech & Biz Salon/Tech 2010. 3. 10. 20:52

    //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

    /****************************************************************************************************
    2010-03-10 jeeta
    기능 : 임의건 체크박스 컨트롤시에 해당건의 자손들에 대해서 임의건의 체크박스 값을 따르도록 한다

            ( 즉, 부모의 체크박스값을 자손들에게도 적용한다는 것이다 )
    설명 : 체크컬럼아이디, 레벨컬럼아이디 값을 할당후, 2개의 펑션을 통해 수행됨
             체크박스를 제어하지 않고, 부모 여부만을 파악할때에는 아래의 내용을 조금 수정해서 사용가능함
    ****************************************************************************************************/

    var chkColId = "MAPP_YNNO";
    var lvlColId = "MENU_LVL";

    // Treeview BindDataset 값 변경시 호출된다
    function dsMenuTree_OnColumnChanged(obj,nRow,strColumnID,varOldValue,varNewValue,nPivotIndex)
    {
        var dsObj = obj;
        var trvObj = trvMenu;
        
        
        // checkbox col 일때에만 수행.
        if( strColumnID == chkColId )
        {
            //trace( "varOldValue/varNewValue:" + varOldValue + "/" + varNewValue );
            var selRow = nRow;
            var selLvl = dsObj.GetColumn(nRow, lvlColId);
            var selVal = dsObj.GetColumn(nRow, chkColId);
            
            //trace("selRow / selLvl " + selRow + "/" + selLvl );
            
            // 하위 인덱스건에 대해서만 루프를 돌면 된다.
            for( i = selRow+1; i < dsObj.GetTotalRowCount(); i++)
            {
                nowLvl = dsObj.GetColumn(i, lvlColId);
                
                //레벨이 똑같은 건이 나왔는데, select 한 selRow건이 아니라면 break 하면 된다.(selRow 건의 자매로 상황 바뀌었으므로 )
                if( nowLvl == selLvl && i != selRow )
                {
                    break;
                }
                
                //부모레벨보다 레벨값이 클때만 체크한다
                if( ToInteger(nowLvl) > ToInteger (selLvl) )
                {
                    // 최종적으로 원하는 경우를 찾아낸다
                    if( fnIsTreeAboveIdx(dsObj, trvObj, i, nowLvl, selRow, selLvl) )
                    {
                        dsObj.FireEvent = false;
                        dsObj.SetColumn(i, chkColId, selVal);
                        dsObj.FireEvent = true;
                    }
                }
            }
        }
    }

    // 특정건(nowIdx) 이 특정건(aboveIdx) 의 자손인지 파악한다.
    function fnIsTreeAboveIdx( dsObj, trvObj, nowIdx, nowLvl, aboveIdx, aboveLvl)
    {
        var rVal = false;
        var lpParentRow;
        var lpParentLvl;
        var chkIdx;
        
        //trace("nowIdx:" + nowIdx );

        //lpParentRow 의 레벨이 aboveLvl 보다 적다면, aboveLvl 과 같게 될때까지 파악해야 한다
        var loopStop = false;

        chkIdx = nowIdx;

        while( loopStop == false )
        {
            
            lpParentRow = trvObj.GetParentRow(chkIdx);
            lpParentLvl = dsObj.GetColumn(lpParentRow, lvlColId);
            
            //trace("lpParentRow:" + lpParentRow );
            //trace("lpParentLvl:" + lpParentLvl );
            
            if( lpParentRow == aboveIdx )
            {
                loopStop = true;
                return true;
            }
            else
            {
                if( ToInteger(lpParentLvl) <= ToInteger(aboveLvl) )
                {
                    loopStop = true;
                }
                else
                {
                    loopStop = false;
                }
            }
            
            chkIdx = ToInteger(lpParentRow);
        }

        return rVal;

    }

    //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ <<

    이 글은 스프링노트에서 작성되었습니다.

Designed by Tistory.