-
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;}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ <<
이 글은 스프링노트에서 작성되었습니다.
'♣ Tech & Biz Salon > Tech' 카테고리의 다른 글
ISO 9126 - Software Assurance, SW품질평가 (0) 2010.09.12 DB LINK 되어있는 대상 DB 확인 (0) 2010.02.24 Weblogic DB 자동 재연결 설정 - Test Reserved Connections (0) 2009.12.22