[ Nexacro.Etc -  확장 비교함수 ]

 

                        [  ◎ 확장 비교문 ]     

 

 

/*******************************************************************************
 ★ 설명
    MiPlatform의 iif()와 동일
******************************************************************************/

function fn_Iif( expr, v_true, v_false )

{

 return expr ? v_true : v_false;

}

 

/*******************************************************************************
  ★ 설명
     iif 비교 함수크
  ★ Parameter
    1. arg0   : true / false 를 판단 하는 값 ( 예 : 1 == 2 )
    2. arg1   : true 일경우 리턴
    3. arg2   : false 일경우 리턴됨)
  ★ return
    - true 일경우 arg1 리턴
    - false 일경우 arg1 리턴
  ******************************************************************************/

 function iif()

 {

         var varRtnValue = null;

 

        var arrArgument = iif.arguments;

 

        if(arrArgument[0]) {

                 return arrArgument[1];

         } else {

                 return arrArgument[2];

         }

 }

/*******************************************************************************
 ★ 설명
    MiPlatform의 decode()와 동일
******************************************************************************/

function fn_Decode( )

{

 var i, fn;

 fn = Decode;

 for( i = 1 ; i < fn.arguments.length ; i+=2 )

 {

  if( fn.arguments[0] == fn.arguments[i] )

   return fn.arguments[i+1];

 }

 return fn.arguments[i-2];

}


/*******************************************************************************
  ★ 설명
     decode 비교 함수
  ★ Parameter
    1. arg0   : 비교 할 변수
     2. arg1   : 비교 대상 변수
     3. arg2   : 비교 대상 변수가 같을 경우 리턴할 값
     4. 반복..
  ★ return
    - 비교 대상 변수가 같을 경우 값 리턴
  ******************************************************************************/

 function decode()

 {

         var varRtnValue = null;

 

        var arrArgument = decode.arguments;

         var varValue = arrArgument[0];

         var bIsDefault = false;

         var nCount = 0;

 

        if((arrArgument.length % 2) == 0) {

                 nCount = arrArgument.length - 1;

                 bIsDefault = true;

         } else {

                 nCount = arrArgument.length;

                 bIsDefault = false;

         }

 

        for(var i = 1; i < nCount; i+=2) {

                 if(varValue == arrArgument[i]) {

                         varRtnValue = arrArgument[i+1];

                         i = nCount;

                 }

         }

 

        if(varRtnValue == null && bIsDefault) {

                 varRtnValue = arrArgument[arrArgument.length-1];

         }

 

        return varRtnValue;

 }

☞  

 

☞  

 
 
 
 

  

'Nexacro-Function > ETC' 카테고리의 다른 글

Nexacro.Array - 값 존재 위치(index)얻기  (0) 2017.02.09
Nexacro.Etc - Graphic  (0) 2017.01.28
Nexacro.Etc - 파일관리  (0) 2017.01.28
Posted by 농부지기
,

[ Nexacro.Form -  POP_UP창 ]

 


/*******************************************************************************
 ★ 설명
     Modal Dialog실행 함수
 ★ parameter
    _NewChildFrame()참조
 ★ return
    - 성공 = variant ( Dialog창에서 close()에 의해 Return된 값 )
    - 실패 = ""
 ******************************************************************************/

function Dialog(sID, sURL, sArg, nLeft, nTop, nWidth, nHeight, sStyle, sProp)

{

 var rtn=null;

 var newChild;

 var MyFrame = this.getOwnerFrame();

 

 newChild = _NewChildFrame(sID, sURL, sArg, nLeft, nTop, nWidth, nHeight, sStyle, sProp);

 rtn = newChild.showModal(sID, MyFrame, sArg);

 this.removeChild(newChild.name);

 newChild.destroy();

 newChild = null;

 

 if( fn_IsNull(rtn) ) rtn = "";

 

 return rtn;

}

 

/*******************************************************************************
 ★ 설명
     Modaless Dialog실행 함수
 ★ parameter
    _NewChildFrame()참조
 ★ return
    - 성공 = true ( 정상작동여부 )
    - 실패 = false
 ******************************************************************************/

function Open(sID, sURL, sArg, nLeft, nTop, nWidth, nHeight, sStyle, sProp)

{

 var rtn;

 var newChild;

 var MyFrame = this.getOwnerFrame();

 

 newChild = _NewChildFrame(sID, sURL, sArg, nLeft, nTop, nWidth, nHeight, sStyle, sProp);

 

 return newChild.showModeless(sID, MyFrame, sArg);

}

 

/*******************************************************************************
 ★ 설명
     sObjName이 Popup창(showModaless()에 의해 뜬창)인지 확인한다.
     단, showModal()에 의해 뜬 창은 해당되지 않는다.
 ★ parameter
    1. sObjName : Popup창 여부를 확인할 Object Name
 ★ return
    - sObjName이 Popup창인 경우 = true
    - sObjName이 Popup창이 아닌 경우 = false
 ★ 주의사항
    단, showModal()에 의해 뜬 창은 해당되지 않는다.
 ******************************************************************************/

function IsObjPopup(sPopupName)

{

 if( fn_IsNull(sPopupName) ) return false;

 

 if( fn_IsNull(application.popupframes(sPopupName)) )

  return false;

 else

  return true;

}

 


/*******************************************************************************
 ★ 설명
    Dialog(), Open()실행용 공통함수.
    ※ 단, 내부에서 사용하는 함수임     
 ★ parameter
    1. sID     : Dialog ID ( 예 : "id1" )         
    2. sURL    : Form URL ( 예 : "Base::a.xfdl" )
    3. Arg    : Dialog 로 전달될 Argument  
                 ( 예1 : {a:'b',c:'d'}  ==> 꼭, {}로 싸야 되고 위의 예 처럼 해야 된다. )
                 ( 예2 : var arr = new Array();
      arr["a"] = "b";
      arr["c"] = "d";  ==> 이래 한 후에 arr넘김 )
 
    4. nLeft   : Dialog창의 Left Position ( 옵션 : Default = 현재화면 중앙 ) ( 예 : -1 또는 100 )
                 (단, 음수또는 null이면 현재화면 중앙에 위치)
    5. nTop    : Dialog창의 Top Position ( 옵션 : Default = 현재화면 중앙 ) ( 예 : -1 또는 100 )
                 (단, 음수또는 null이면 현재화면 중앙에 위치)
    6. nWidth  : Dialog창의 Width ( 옵션 : Default = Popup화면의 width ) ( 예 : -1 또는 100 )
                 (단, 음수또는 null이면 Popup화면의 width)
    7. nHeight : Dialog창의 Height ( 옵션 : Default = Popup화면의 height ) ( 예 : -1 또는 100 )
    (단, 음수또는 null이면 Popup화면의 width)
    8. sStyle  : Dialog Open 기본 유형 (옵션 : Default = "" ) ( 예 : "title=true,status=true" )
                 (단, 간단히 지정하도록 처리했으므로 ChildFrame의 Property명과 동일하지는 않다.)
        - title  : Title Bar표시여부 ( Default = true ) ( true = Title Bar 표시 )
        - status : Status Bar표시여부 ( Default = true ) ( true = Status Bar 표시 )
        - close  : Close Button활성화 여부 ( Default = true ) ( true = Close Button활성화 )
        - min    : min Button활성화 여부 ( Default = true )  ( true = Min Button 활성화 )
        - max    : min Button활성화 여부 ( Default = true )  ( true = Max Button 활성화 )
    9. sProp   : Child Frame의 모든 Property를 Property명=Property값, Property명=Property값,... 형태로 설정한다.
                 (옵션 : Default = "") ( 예 : "titletext='a', style.border='1 solid blue', ... )
                 ( 단, sStyle에 동일한 처리가 있으면 sProp가 적용된다.
                   즉, sStyle="title=true", sProp="showtitlebar=false"라면 Title Bar는 표시되지 않는다.
 ★ return
    - 성공 = Child Frame Object
    - 실패 = null
 ★ 주의사항
    1. nLeft, nTop이 null이거나 음수이면 현재화면의 중앙에 위치함
    2. nWidth, nHeight이 하나라도 null이거나 음수이면 Popup화면의 width, height가 설정됨
       따라서, nWidth, nHeight를 설정하고 싶으면 두 값 모두 양수값을 확실히 설정해야 한다.
    3. 조금더, 자세하게 Popup화면을 제어하고 싶으면 ( 예를 들어, scrollbar, border등 )
       sProp에 지정하거나 Dialog창의 Frame을 얻어 직접제어할 것
    4. nLeft, nTop, nWidth, nHeight의 좌표계는 screen기준 좌표계임에 주의할것       
 ★ Bug
    1. sStyle에서 2009.12.10일 현재 min, max, status 잘안됨(???(모름 - Theme때문인가?))
    2. bAutoSize = true인 경우 Popup창의 position을 체크하면 값이 잘 안나옴(???(모름))
    3. ChildFrame.init()에서 좌표처리에 BUG있음(???(모름))
    4. ChildFrame.resizable=true 안먹네(???(모름))
 ******************************************************************************/

function _NewChildFrame( sID, sURL, Arg, nLeft, nTop, nWidth, nHeight, sStyle, sProp)

{

 var newChild = null;

 var MyFrame = this.getOwnerFrame();

 

 var bTitle = true;

 var bStatus = true;

 var bClose = true;

 var bMin = true;

 var bMax = true;

 var bAutoSize = true;

 var flag;

 var aProp = new Array();

 

 if( fn_IsNull(sID) || fn_IsNull(sURL) ) return null;

 

 newChild = new ChildFrame;

 

 if( fn_IsNull(nLeft) || nLeft < 0 )

  newChild.openalign.halign = "center";

 if( fn_IsNull(nTop) || nTop < 0 )

  newChild.openalign.valign = "center";

 if( fn_IsNull(nWidth) || nWidth < 0 ||

    fn_IsNull(nHeight) || nHeight < 0 )

 {

  nWidth = 0;

  nHeight = 0;

  bAutoSize = true;

 }

 else

  bAutoSize = false;

  

 if( fn_IsNull(sStyle) == false )

 {

  var i, arr, arr1;

  arr = sStyle.split(",");

  for( i = 0 ; i < arr.length ; i++ )

  {

   arr1 = arr[i].split("=");

   arr1[0] = RTrim(LTrim(arr1[0]));

   arr1[1] = RTrim(LTrim(arr1[1]));  

   if( arr1[1].toLowerCase() == "true" )  flag = true;

   else          flag = false;

   

   if( arr1[0].toLowerCase() == "title" )   bTitle = flag;

   if( arr1[0].toLowerCase() == "status" )  bStatus = flag;

   if( arr1[0].toLowerCase() == "close" )   bClose = flag;   

   if( arr1[0].toLowerCase() == "min" )   bMin = flag;   

   if( arr1[0].toLowerCase() == "max" )   bMax = flag;      

  }

 }

 

 if( fn_IsNull(sProp) == false )

 {

  var i;

  aProp = sProp.split(",");

  for( i = 0 ; i < aProp.length ; i++ )

  {

   aProp[i] = aProp[i].split("=");

   aProp[i][0] = RTrim(LTrim(aProp[i][0]));

   aProp[i][1] = RTrim(LTrim(aProp[i][1]));

  }

 }

 

 newChild.formurl = sURL;

 

 ////// sStyle내용 적용( 이부분은 init()호출전에 사용해야 함 )

 newChild.showtitlebar = bTitle;

 newChild.showstatusbar = bStatus;   

 newChild.autosize = bAutoSize;

 

 newChild.init(sID, nLeft, nTop, nLeft + nWidth, nTop + nHeight);

 

 ////// sStyle내용 적용( 이부분은 init()호출후에 사용해야 함 )

 newChild.titlebar.minbutton.enable = bMin;  

 newChild.titlebar.maxbutton.enable = bMax;  

 newChild.titlebar.closebutton.enable = bClose;

 

 MyFrame.addChild(sID, newChild); // 이거 꼭 해야 함

 ////// sProp내용 적용

 for( i = 0 ; i < aProp.length ; i++ )

 {

  SetProp( "this.getOwnerFrame()."+sID, aProp[i][0], aProp[i][1] );

 }

 MyFrame.removeChild(sID);   // 이거 꼭 해야 함

 

 return newChild;

}

☞  

 

☞  

 
 
 
 

  

'Nexacro-Function > Form.PouUp' 카테고리의 다른 글

Nexacro.Form - showModeless  (0) 2017.01.28
Posted by 농부지기
,

[ Nexacro.Form -  showModeless  ]

 

* 특징 : showModeless 팝업창의 특징은 팝업창을 종료하지 않고도 Main창을 제어할 수 있다.
         이런 특징으로 Main창에서 다시 팝업창을 호출 할 수 있게 된다.
         이때 다시 팝업창을 Open하면 오류(내용은 아래 존재)가 발생하게 된다.
         
         이런 이유로 기존 팝업창을 close하고 다시 띄워야 된다.
         하지만 close하지 않고도 팝업창이 이미 띄워져 있는 지 검사하여 해당 팝업창을
         제어 할 수도 있다.

* 존재 하는 팝업창을 다시 띄우면 나는 오류
  [(US231022)는 이미 실행중입니다. 같은 ID로 동시에 여러 개의 창을 띄울수 없습니다. ]

☞ 예문1) 기존 팝업창을 찾아서 argument를 넘기고, function을 제어 하는 방법
 

/*++
@desc    Grid를 double click시
*/

function fn_ApprovalPouUp(obj:Grid, e:GridClickEventInfo)
{
    
if (e.row < 0) return;
    
    
var oParam = new Object();
    
var sSO_NO = ds_SoList.getColumn(e.row, "SO_NO");
    oParam = {pSO_NO:sSO_NO};

    if (application.popupframes["US231022"]){
        application.popupframes["
US231022"].form.pSO_NO=sSO_NO;
        application.popupframes["
US231022"].form.fn_Onload();
    }
else{
        cfn_openDialogCenter("
US231022", "HSUS::US231022.xfdl", 800 , 632, "modeless", oParam);
    }
}

☞ 예문2) 기존 팝업창을 종료하고, 신규ID를 부여하여 팝업창을 OPEN
          단점, 팝업창을 사용자가 적당한 곳에 이동했을 경우  다시 띄우므로 항상 중앙에 위치하게 된다.

 

/*++
@desc    Grid를 double click시 팝업창 호출
*/

var pIdx=0;
function fn_ApprovalPouUp(obj:Grid, e:GridClickEventInfo)
{
    
if (e.row < 0) return;    

    var oParam  = new Object();
    oParam = {pSO_NO:ds_SoList.getColumn(e.row, "
SO_NO")};    

    //기 존재 하면 삭제
    
var MDIFrame = application;
    
var i = MDIFrame.all.length;

    while ( i > 0)
    {
        i--;
        
var objChildFrame = MDIFrame.all[i];
        
if( objChildFrame.name == "US231022_" + pIdx ){
            objChildFrame.form.close();
            break;
        }
    }
    pIdx ++;
    
    
//신규로 다시 호출
    cfn_openDialogCenter("
US231022_" + pIdx, "HSUS::US231022.xfdl", 800 , 632, "modeless", oParam);

}


 

 
 
   
 

/*******************************************************************************
 * 기능 : 파라메터가 있는 다이얼로그 창을 타입별로 띄운다
 * 인자 : 화면아이디, URL, 가로, 세로, 타입, 파라메터
 * 리턴 : 팝업창에서 넘겨 받은 결과값
******************************************************************************
/  
function cfn_openDialogCenter(strid, url, width, height, type, arg, resize)
{
    
var i, nRow, objChildFrame;
        
    
var arrFramelist = this.getOwnerFrame().all;
    
for(i=0; i<arrFramelist.length; i++){
        
if(arrFramelist[i].name == strid) {
            
return false;
        }
    } 

    objChildFrame = new ChildFrame();   

    //다이얼로그 뜨는 위치 계산
    
var nMoniterIndex = system.getMonitorIndex(system.cursorx, system.cursory); //다중 모니터일 경우 사용중인 모니터 인덱스를 구함.
    
var strScreenRes  = system.getScreenResolution(nMoniterIndex);
    
var nCenterX      = new Number(strScreenRes.split(" ")[0]);
    
var nCenterY      = new Number(strScreenRes.split(" ")[1]);
    

    // 모니터의 중앙이 아닌 포털의 중앙에 뜨게 변경 BEGIN

    
var nAppWidth   = application.mainframe.position.right  - application.mainframe.position.left;
    
var nAppHeight  = application.mainframe.position.bottom - application.mainframe.position.top;
    
var nAppCenterX = application.mainframe.position.right  - (nAppWidth / 2);
    
var nAppCenterY = application.mainframe.position.bottom - (nAppHeight / 2);
    posX = Math.round(nAppCenterX - (width / 2));
    posY = Math.round(nAppCenterY - (height / 2));
    
// 모니터의 중앙이 아닌 포털의 중앙에 뜨게 변경 END    

    objChildFrame.init(strid, posX, posY, width, height, url);
    
if (resize==null) objChildFrame.resizable = true;
    else objChildFrame.resizable =resize;
    objChildFrame.showtitlebar =
true;
    objChildFrame.layered      =
true;
    
if(type != "notice"){
        objChildFrame.style.background = "
white";
        objChildFrame.style.bordertype = "
round 7 7";
    }

    var result = "";    

    // Show Object  
    
if(type == "modeless"){
        objChildFrame.showModeless(
this.getOwnerFrame(), arg);
    }
    
else if(type == "modal" || type == "notice"){
        result = objChildFrame.showModal(
this.getOwnerFrame(), arg);
    }
    
else {
        result = objChildFrame.showModal(
this.getOwnerFrame(), arg);
    }

    return result;
}

'Nexacro-Function > Form.PouUp' 카테고리의 다른 글

Nexacro.Form - POP_UP창  (0) 2017.01.28
Posted by 농부지기
,

[ Nexacro.Grid -  treeView2 ]

 

 

 

/******************************************************************************
  * Function명 : gf_checkBytesGrid()
  * 설명       : Grid의 byte수를 체크하고 초과되는 내용을 자동으로 잘라낸다.
                 ontextchange 이벤트에서 호출.
  * Params     : field - 체크할 object
                 autoCutYn - 자동으로 잘라낼지 여부(파라메터 넘기지 않으면 기본값 'Y'로 처리)
  * Return     : boolean - true 또는 false
  ******************************************************************************/

 function gf_checkBytesGrid(obj:Grid, e:GridEditTextChangeEventInfo) {

     var str = e.posttext;

     var maxByte = obj.getCellProperty("body", e.cell, "editlimit");

     

    if ( gf_isNull(str) ) return true;

     if ( gf_isNull(maxByte) || toNumber(maxByte) < 0 ) return true;

     

    var editType = obj.getCellProperty("body", e.cell, "edittype");

     if ( !gf_isNull(editType) && (editType == "mask" || editType == "masknumber") ) return true;

     

    var cutIdx = gf_cutIndexByBytes(str, maxByte);

     

    if (cutIdx > 0)

     {

                 obj.setEditText(str.substring(0, cutIdx));

                 return false;

     }

     

    return true;

 }

 

☞  

 

☞  

 
 
 
 

  

'Nexacro-Function > Grid' 카테고리의 다른 글

Nexacro.Grid - cell을 area로 선택 시 cell의 sum,avg구하기  (0) 2018.01.04
Nexacro.Grid - treeView  (0) 2017.01.28
Nexacro.Grid - excel exort  (0) 2017.01.28
Nexacro.Grid - copy & paste  (0) 2017.01.28
Nexacro.Grid - Conents Editor  (0) 2017.01.28
Posted by 농부지기
,

[ Nexacro.Grid -  treeView ]

 

 


/*********************************************************************************************
 ★ 설명
     Grid로 Treeview처리 시 nCurRow의 sLevelCol에 해당하는 현재 Level보다
     0 ~ (nCurRow-1) Record중 더 상위의 Level(bFlag에 따라)에  해당하는 Record를
     모두 구해 Array로 Return한다.
 ★ parameter
    1. obj:Dataset : Dataset Object ( 예 : Dataset00 )
    2. sLevelCol   : Level값이 들어있는 Column명 ( 예 : "level" )    
    3. nCurrow     : 현재 Record ( 예 : 10 )
    4. bInclude    : 현재 level을 포함할 지 여부 ( 예 : true ) ( Default = true )
                     - true = 상위의 Level을 찾을 때 nCurRow Level과 동일한 Level도 포함
                     - false = 상위의 Level을 찾을 때 nCurRow Level과 동일한 Level은 포함 안함
 ★ return
    - 성공 = Array ( record번호만 들어있음 )
    - 실패 = 빈 Array
*********************************************************************************************/

function TreeGetParentList(obj:Dataset, sLevelCol, nCurRow, bInclude)

{

 var i, nLevel, nChkLevel;

 var aRet = new Array(), aNo=0;

 var bFlag;

 

 if( fn_IsNull(obj) || fn_IsNull(sLevelCol) || fn_IsNull(nCurRow) )

  return aRet;

  

 if( fn_IsNull(bInclude) == true ) bInclude = true;

 

 if( bInclude == true )

  nChkLevel = parseInt(obj.getColumn(nCurRow, sLevelCol));

 else

  nChkLevel = parseInt(obj.getColumn(nCurRow, sLevelCol))-1;

 for( i = (nCurRow-1) ; i >= 0 ; i-- )

 {

  nLevel = parseInt(obj.getColumn(i, sLevelCol));

  if( nLevel <= nChkLevel )

  {

   aRet[aNo] = i;

   aNo++;

   nChkLevel = nLevel;

  }

 }

 return aRet.sort();

}

 

/*********************************************************************************************
 ★ 설명
     Grid로 Treeview처리 시 0 ~ (nCurRow-1)의 Record중
     nOffsetLevel에 해당하는 시작 부모 Record를 찾는다.
 ★ parameter
    1. obj:Dataset : Dataset Object ( 예 : Dataset00 )
    2. sLevelCol   : Level값이 들어있는 Column명 ( 예 : "level" )    
    3. nCurrow     : 현재 Record ( 예 : 10 )
    4. nOffsetLevel    : 양수(0, 음수는 안됨)에 해당하는 검색할 Offset Level ( 옵션 : Default = 1 )
                         ( 예 : 1 = 나보다 1 Level 위의 Parent의 시작 Record를 찾으라는 뜻 )
 ★ return
    - 성공 = Start Record
    - 실패 = -1
 ★ 주의사항
    nOffsetLevel은 0 또는 음수를 주면 안된다.
*********************************************************************************************/

function TreeGetParentStart(obj:Dataset, sLevelCol, nCurRow, nOffsetLevel)

{

 var i, nLevel, nChkLevel, nStartRow = -1;

 

 if( fn_IsNull(obj) || fn_IsNull(sLevelCol) || fn_IsNull(nCurRow) )

  return -1;

 

 if( fn_IsNull(nOffsetLevel) == true ) nOffsetLevel = 1;

 if( nOffsetLevel <= 0 )  

  return -1;

 

 nChkLevel = parseInt(obj.getColumn(nCurRow, sLevelCol)) - nOffsetLevel;

 for( i = (nCurRow-1) ; i >= 0 ; i-- )

 {

  nLevel = parseInt(obj.getColumn(i, sLevelCol));

  if( nLevel == nChkLevel )

  {

   nStartRow = i;

   break;

  }

  if( nLevel < nChkLevel )

   nChkLevel = nLevel;

 }

 

 return nStartRow;

}

 

********************************************************************************************
 ★ 설명
     Grid로 Treeview처리 시 nCurRow+1 ~ 끝 Record중
     nCurRow의 Level이하의 Child Level이 끝나는 Record를 찾는다.
     즉, 자식이 끝나는 Record를 찾는다.
 ★ parameter
    1. obj:Dataset : Dataset Object ( 예 : Dataset00 )
    2. sLevelCol   : Level값이 들어있는 Column명 ( 예 : "level" )    
    3. nCurrow     : 현재 Record ( 예 : 10 )
 ★ return
    - 성공 = End Record
    - 실패 = -1
*********************************************************************************************/

function TreeGetChildEnd(obj:Dataset, sLevelCol, nCurRow)

{

 var i, nLevel, nChkLevel, nEndRow = (obj.rowcount - 1);

 

 if( fn_IsNull(obj) || fn_IsNull(sLevelCol) || fn_IsNull(nCurRow) )

  return -1;

 

 nChkLevel = parseInt(obj.getColumn(nCurRow, sLevelCol));

 

 for( i = (nCurRow+1) ; i < obj.rowcount ; i++ )

 {

  nLevel = parseInt(obj.getColumn(i, sLevelCol));

  if( nLevel <= nChkLevel )

  {

   nEndRow = i-1;

   break;

  }

 }

 

 return nEndRow;

}

/******************************************************************************
  * Function명 : gf_getTreeChildCountAll
  * 설명       : Tree의 특정 Node의 모든 Child Node 갯수를 가져온다.
  * Params     : gridObj      - Grid
  *              dsRow        - Dataset row index
  * Return     : integer
  ******************************************************************************/

 function gf_getTreeChildCountAll(gridObj:Grid, dsRow)

 {

         var dsObj = eval(gridObj.binddataset);

         var childCount = gridObj.getTreeChildCount(dsRow);

         

        if(childCount > 0)

         {

                 var startIdx = gridObj.getTreeChildRow(dsRow, 0);

                 var endIdx = gridObj.getTreeChildRow(dsRow, -1);

                 

                childCount = endIdx - startIdx + 1;

         }

         

        return childCount;

 }

 

/******************************************************************************
  * Function명 : gf_getTreeChildRowAll
  * 설명       : Tree의 특정 Node의 Child Node 의 row index를 배열에 담아 반환한다.
  * Params     : gridObj      - Grid
  *              dsRow        - Dataset row index
  *              childRows    - Array
  * Return     : Array(Child Node 의 Dataset row index를 담고 있는 배열)
  ******************************************************************************/

 function gf_getTreeChildRowAll(gridObj:Grid, dsRow, childRows)

 {

         var dsObj = eval(gridObj.binddataset);

         var childCount = gridObj.getTreeChildCount(dsRow);

         

        if(childCount > 0)

         {

                 var startIdx = gridObj.getTreeChildRow(dsRow, 0);

                 var endIdx = gridObj.getTreeChildRow(dsRow, -1);

                 

                for(var idx = startIdx; idx <= endIdx ; idx++)

                 {

                         childRows[childRows.length] = idx;

                 }

         }

         

        return childRows;

 }

 

/******************************************************************************
  * Function명 : gf_getTreeChildCheckAll
  * 설명       : Tree의 특정 Node의 모든 Child Node를 Parent Node 체크 상태에 따라 check/uncheck 수행
  * Params     : gridObj       - Grid
  *              dsRow         - Dataset row index
  *              checkColumnNm - Tree Column속성중 treecheck에 bind된 column 명
  * Return     : Array
  ******************************************************************************/

 function gf_getTreeChildCheckAll(gridObj:Grid, dsRow, checkColumnNm)

 {

         var dsObj = eval(gridObj.binddataset);

         var checkYn = dsObj.getColumn(dsRow, checkColumnNm);

         var childRows = gf_getTreeChildRowAll(gridObj, dsRow, new Array());

         

        for (var idx=0; idx < childRows.length; idx++)

         {

                 dsObj.setColumn(childRows[idx], checkColumnNm, checkYn);

         }

         

        return childRows;

 }

☞  

 

☞  

 
 
 
 

  

'Nexacro-Function > Grid' 카테고리의 다른 글

Nexacro.Grid - cell을 area로 선택 시 cell의 sum,avg구하기  (0) 2018.01.04
Nexacro.Grid - treeView2  (0) 2017.01.28
Nexacro.Grid - excel exort  (0) 2017.01.28
Nexacro.Grid - copy & paste  (0) 2017.01.28
Nexacro.Grid - Conents Editor  (0) 2017.01.28
Posted by 농부지기
,

[ Nexacro.Grid -  excel exort ]

 


참고 : 아래 객체중 [gExportObj]는 UX Studio에서 GlobalVariables에서 Objects 에 [ExportObject]로 추가한 객체명임

//-------------------------------------------------------------------------------------------------
// 기능 : 엑셀 다운로드 버튼 클릭 시
//-------------------------------------------------------------------------------------------------

function fn_Exceldn(obj:Button,  e:ClickEventInfo)
{
    //1. header 용 grid, dataset 생성
    var sSearchName;
    sSearchName = "[계획구분 : 1:경영계획] "
                + "[브랜드 : "   + divSearch.cboBrandCd.text + "] "
                + "[계획년도 : " + divSearch.divPlanOrdr.fn_GetPlanYy()   + ":年] "
                + "[계획차수 : " + divSearch.divPlanOrdr.fn_GetPlanOrdr() + ":차] ";

    gfn_bpCreateExcelGridDs("grdTitle0" , "dsTitle0" , 1, new Array("타이틀명",  '', sSearchName));
    gfn_bpCreateExcelGridDs("grdTitle1" , "dsTitle1" , 8, new Array("sub타이틀명1") );
    gfn_bpCreateExcelGridDs("grdTitle21", "dsTitle21", 8, new Array("sub타이틀명2"));
    gfn_bpCreateExcelGridDs("grdTitle22", "dsTitle22", 8, new Array("sub타이틀명3"));
    gfn_bpCreateExcelGridDs("grdTitle3" , "dsTitle3" , 6, new Array("sub타이틀명4") );

    //2. 생성할 grid 목록 지정
    //형식 : gridName:line 출력여부:헤더라인수:현grid exort 후 빈 라인
    var arrGridList = new Array("grdTitle0:noLine:0:1"
                              , "grdTitle1:line:0:0" , "divList.grdMainOne:line:2:1"
                              , "grdTitle21:line:0:0", "divList.grdMainTwo1:line:2:1"
                              , "grdTitle22:line:0:0", "divList.grdMainTwo2:line:2:1"
                              , "grdTitle3:line:0:0" , "divList.grdMainThree:line:1:1");

    //3. excel export
    gfn_bpMultiExcelDown(arrGridList, this.titletext, this.titletext);
}
 

/******************************************************************************************
 * 기      능 : 엑셀Export용 Grid와 Dataset 생성하기
 * 인      자 : psObjGrid   - grid name
                psObjDs      - dataset name
                pnCellCnt    - grid생성 시 cell 갯수 (해당 cell만큼 merge가 처리 된다.)
                paData       - dataset에 추가할 자료 (array 형)
 * 반      환 :
 *****************************************************************************************/

function gfn_bpCreateExcelGridDs(psObjGrid, psObjDs, pnCellCnt, paData){
    var objDs = new Dataset;
    
    //1. Dataset 생성
    if(!isValidObject(psObjDs) ){
        objDs = new Dataset;
        objDs.name = psObjDs;
        this.addChild(psObjDs, objDs);
        objDs.addColumn("text0", "STRING", 256);
    }else{
        objDs = eval(psObjDs);
    }
    
    //2. Grid 생성
    if(!isValidObject(psObjGrid) ){
        var poGrid = new Grid(psObjGrid, 0, 0, 1, 1);
        this.addChild(psObjGrid, poGrid);
        poGrid.show();

        poGrid.binddataset = psObjDs ;
        poGrid.insertContentsRow("body", 0, true);
        for(var i=0; i<pnCellCnt; i++) {poGrid.appendContentsCol(true)};
        
        poGrid.mergeContentsCell('body',0,0,0,pnCellCnt,0,false);
        
        poGrid.setCellProperty( "body", 0, "text" , "bind:text0");
        poGrid.setCellProperty( "body", 0, "align", "left");
    }
    
    //3. 자료 추가
    var nInstRow;
    if (objDs.rowcount == 0){
        for(var idx=0; idx<paData.length; idx++){
                nInstRow = objDs.addRow();
                objDs.setColumn(nInstRow, "text0", paData[idx]);
        }
    }
}
 


/******************************************************************************************
 * 정의 : 여러개 Grid를 Excel Export
 * 인자 : objGrid - 그리드
 *****************************************************************************************/

function gfn_bpMultiExcelDown(paObjList, psSheetName, psExcelName){
    var fileName = psExcelName + ".xlsx";
    var nStartRow = 1;
    
    gExportObj.clear();
    gExportObj.exporttype     = ExportTypes.EXCEL;
    gExportObj.activepagename = psSheetName;    
    gExportObj.exportfilename = fileName;
    gExportObj.exportopenmode = "overwrite";
    
    for(var nIdx=0; nIdx<paObjList.length; nIdx++){
    
        var arrProperty = paObjList[nIdx].split(':');
        var objGrid     = eval(arrProperty[0]);
        
        if (arrProperty[1].toUpperCase() == "LINE"){
            gExportObj.addExportItem(ExportItemTypes.GRID, objGrid , psSheetName+"!A" + nStartRow, "allband");
        }else{
            gExportObj.addExportItem(ExportItemTypes.GRID, objGrid , psSheetName+"!A" + nStartRow, "nohead,nosumm","allrecord","nosuppress","onlyvalue","none","color","both","cellline");
        }
         
        nStartRow = nStartRow + objGrid.rowcount + toNumber(arrProperty[2]) + toNumber(arrProperty[3]);
    }

    gExportObj.exportmessageprocess = "%d 항목을 출력중입니다. %d/%d";
    gExportObj.export();
}


/*********************************************************************************************
 ★ 설명
     Grid Excel Export하는 함수
 ★ parameter
    1. obj:Grid : Grid Object ( 예 : Grid00 )
    2. ExpObj:ExportObject : Export Object (옵션 : Default는 생성해서 처리됨)
    3. sSheetName : Sheet 명 ( 옵션 : Default="Sheet1" )
 ★ return
    - 성공 = true
    - 실패 = false
*********************************************************************************************/

function GridExportExcel(obj:Grid, ExpObj:ExportObject, sSheetName)

{

 if( fn_IsNull(obj) ) return false;

 

 if( fn_IsNull(ExpObj) == true )

  var ExpObj = new ExportObject;

 if( fn_IsNull(sSheetName) == true )

  sSheetName = "Sheet1";

  

 ExpObj.exportfilename = Grid.name+".xls";  // 꼭 줘야됨

 ExpObj.exporttype     = ExportTypes.EXCEL; // 현재 Excel만 가능합니다.

 ExpObj.activepagename = sSheetName;

 

 ExpObj.addExportItem(ExportItemTypes.GRID, obj, sSheetName+"!A1");

 ExpObj.export(); // Excel로 Export실행

 

 return true;

}

/*********************************************************************************************
  ★ 설명
      Grid Excel Export할 때 그리드에 보이는데로 열기. 단. "SEQ, No, 상태, 삭제"  컬럼은 제거
  ★ parameter
    1. obj:Grid : Grid Object ( 예 : Grid00 )
     2. sSheetName : Sheet 명 ( 옵션 : Default="Sheet1" )
     3. sActivemode : ExportObject의 exportactivemode를 지정 ( Default='active' )
     3. sFilePath : Export할 파일 풀 경로.
  ★ return
    - 성공 = true
    - 실패 = false
 *********************************************************************************************/

 function gf_gridViewExportExcel(obj:Grid, sSheetName, sActivemode, sFilePath)

{

         

        if( gf_isNull(obj)      )       return false;

 

        //1. Grid 복제

         var objGrid ;  

        if(this.components["excelGrid"]!=null)

         {

                 objGrid = this.components["excelGrid"];  

        }

         else

         {

                 objGrid = new Grid();

                 objGrid.init("excelGrid", 10, 10, 800, 100);

                 this.addChild("excelGrid", objGrid);

                 objGrid.binddataset = obj.binddataset;

                 objGrid.tooltiptext = obj.tooltiptext;

                 objGrid.visible = false;

                 objGrid.show();

         }

 

        var strFormatContents = obj.getCurFormatString();

         strFormatContents = "<Formats>" + strFormatContents + "</Formats>";

         objGrid.formats  = strFormatContents;

 

        //2. Excel에서 제외할 Column 제거..................  

        objGrid.deleteContentsCol("left",0);    // 틀고정 있는 컬럼을 먼저 제거한다.

         

        objGrid.enableevent = false;

         

        //그리드 컬럼 삭제하기 excelExportDelCell userdata 확인

         try{

                 var delCell = obj.excelExportDelCell;

                 if(!gf_isNull(delCell)){

                         var arr = delCell.toString().split(",").reverse();

                         for(i in arr){

                                 objGrid.deleteContentsCol(arr[i].trim());

                         }

                 }

         }catch(e){

                 trace("js_utill::excelExportDelCell 입력값 확인하세요");

         }

         

        var cellCount = objGrid.getCellCount("Head");

         for(i=cellCount-1; i>-1; i--)

         {

                 var cellText = objGrid.getCellProperty("Head", i, "text" );

                 

                if(cellText=="삭제"

                        || cellText=="상태"

                        || cellText == "No"  

                        || cellText == "SEQ")

                 {

                         objGrid.deleteContentsCol(i);

                 }

         }

         

        //colSize = 0 컬럼 제외

         cellCount = objGrid.getFormatColCount();

         for(i=cellCount-1; i>-1; i--)

         {

                 if(objGrid.getFormatColSize(i) == 0){

                         objGrid.deleteContentsCol(i);

                 }

         }

         

        objGrid.enableevent = true;

         

        ////trace(eval(objGrid.binddataset).saveXML());

 

        //3. ExpObj:ExportObject : Export Object (옵션 : Default는 생성해서 처리됨)

         var ExpObj = new ExportObject;

         

        if( gf_isNull(sSheetName) == true )

                 sSheetName = "Sheet1";

 

        ExpObj.exportfilename   = obj.name+".xls";      // 꼭 줘야됨

         ExpObj.exporttype       = ExportTypes.EXCEL;    // 현재 Excel만 가능합니다.     

        ExpObj.activepagename   = sSheetName;

 

        var chk = ExpObj.addExportItem(ExportItemTypes.GRID, objGrid, sSheetName+"!A1");        

        ExpObj.export();        // Excel로 Export실행

 

        //trace("0:성공, -1:실패 = "+chk);

        return true;

 }

 

/*********************************************************************************************
  ★ 설명
      Grid Excel Export할 때 옵션에 따라 데이터셋내용 전체를 열거나,
      "SEQ, No, 상태, 삭제"  컬럼은 제거하는 옵션.
      그리고 바로열기, 파일로 저장, 취소 3가지 옵션.
      
     현재 :그리드의 tooltiptext 속성명으로 파일명 생성되도록 하였음.
       
 ★ parameter
    1. obj:Grid : Grid Object ( 예 : Grid00 )
 ★ return
    - 성공 = true
    - 실패 = false
 *********************************************************************************************/

 function gf_gridExportExcel(obj:Grid,  e:ClickEventInfo)

 {

         var arg_url = "common_pop::pop_Confirm.xfdl";

         var returnObj = gf_showModal(arg_url, "", false);

         

        var excelInfo = returnObj[0];

         var rtn =  excelInfo["open_type"];                      //열기 종류

         var excelType = excelInfo["excel_type"];        //엑셀 종류

         

//      var rtn = 0;

 //      var excelType = "0001";

 

        if(excelType == '0002') //전체

         {

                 if(obj.getFormatString().indexOf("\"import\"") == -1){

                         gf_message("저장용 그리드 포맷이 존재하지 않습니다.\n관리자에게 문의해 주십시오.", "오류");

                         return;

                 }

         }

         

        var objVFile ;

 

        if(rtn==0)

         {       

                if(excelType == '0001') //보이는데로

                 {

                         gf_gridViewExportExcel(obj, "Sheet1", "active") ;

                 }

                 else    //전체다운

                 {

                         gf_gridAllExportExcel(obj, "Sheet1", "active") ;

                 }

         }

         else if(rtn==1)

         {       

        

                var FileDialog_excel = new FileDialog;

                 FileDialog_excel.defaultextention = true;

 

                var sFilter = "Excel 통합문서 (*.xlsx)|*.xlsx|Excel 97 - 2003 통합문서 (*.xls)|*.xls";

                 FileDialog_excel.filter = sFilter;

 

                // Excel저장을 위해 파일다이얼로그창를 띄운다.

                 objVFile = FileDialog_excel.open("파일저장", FileDialog.SAVE, "%MYDOCUMENT%", obj.tooltiptext );

 

                if(excelType == '0001') //보이는데로

                 {

                         //obj.formatid = "default";

                 }

                 else    //전체다운

                 {

                         //import용 그리드 포멧을 만들어놔야 한다.

                         obj.formatid = "import";                

                }

 

                if(excelType == '0001') //보이는데로

                 {

                 

                        //1. Grid 복제(복제 안하면 그리드 내용이 삭제됨.)

                         var objGrid ;  

                        if(this.components["excelGrid"]!=null)

                         {

                                 objGrid = this.components["excelGrid"];  

                        }

                         else

                         {

                                 objGrid = new Grid();  

                                objGrid.init("excelGrid", 10, 10, 800, 100);

                                 this.addChild("excelGrid", objGrid);

                                objGrid.binddataset = obj.binddataset;

                                 objGrid.tooltiptext = obj.tooltiptext;

                                 objGrid.visible = false;

                                 objGrid.show();

                        }

          

                        var strFormatContents = obj.getCurFormatString();

                         objGrid.formats  = obj.formats;

                         

                

                        //Excel에서 제외할 Column 제거..................  

                        objGrid.deleteContentsCol("left",0);    // 틀고정 있는 컬럼제거

                         

                        var cellCount = objGrid.getCellCount("Head");

                 

                        objGrid.enableevent = false;

 

                        for(i=cellCount-1; i>-1; i--)

                         {

                                 var cellText = objGrid.getCellProperty("Head", i, "text" );

 

                                try{

                                         if(cellText=="삭제" || cellText=="상태" || cellText.toLowerCase()=="seq" || cellText.toLowerCase()=="no")

                                         {

                                                 objGrid.deleteContentsCol(i);

                                         }

                                 }catch(e){}

                         }

                         

                        //colSize = 0 컬럼 제외

                         cellCount = objGrid.getFormatColCount();

                         for(i=cellCount-1; i>-1; i--)

                         {

                                 if(objGrid.getFormatColSize(i) == 0){

                                         objGrid.deleteContentsCol(i);

                                 }

                         }

                        

                        objGrid.enableevent = true;

                 }

 

                if( objVFile == undefined ) return;

                 

                var ExpObj = new ExportObject;

                 var sSheetName = "Sheet1";

 

                ExpObj.exportfilename   = objVFile.fullpath;    // 꼭 줘야됨

                 ExpObj.exporttype       = ExportTypes.EXCEL;    // 현재 Excel만 가능합니다.     

                ExpObj.activepagename   = sSheetName;

 

                ExpObj.exportopenmode   = "alwaysnew";

                 ExpObj.exportactivemode = "noactive";

                 ExpObj.exportsavemode   = "save";

 

                if(excelType == '0001') //보이는데로

                 {

                         var chk = ExpObj.addExportItem(ExportItemTypes.GRID, objGrid, sSheetName+"!A1");        

                }

                 else

                 {

                         var chk = ExpObj.addExportItem(ExportItemTypes.GRID, obj, sSheetName+"!A1");    

                }

                 

                ExpObj.export();        // Excel로 Export실행

 

                //trace("0:성공, -1:실패 = "+chk);

 

                obj.formatid = "default";

 

        }

         else if(rtn==2)

         {

                 // 취소

         }

 }

 

 
 

 

'Nexacro-Function > Grid' 카테고리의 다른 글

Nexacro.Grid - treeView2  (0) 2017.01.28
Nexacro.Grid - treeView  (0) 2017.01.28
Nexacro.Grid - copy & paste  (0) 2017.01.28
Nexacro.Grid - Conents Editor  (0) 2017.01.28
Nexacro.Grid - all Checked 처리  (0) 2017.01.28
Posted by 농부지기
,

[ Nexacro.Grid -  copy & paste ]

 

/*==+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 * Group : 10. Grid 영역 copy & paste

 **=++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/


/******************************************************************************************
 * 기능 : 그리드 Ctrl + C 입력시 그리시 Cell Text 복사
 * 인자 : obj:Grid
 *         e:KeyEventInfo
 * 리턴 :
 * 예문 :
 *****************************************************************************************/

function gfn_CopyGridCellText(obj:Grid, e:KeyEventInfo)

{

    if( e.ctrlKey && e.keycode == 67)

    {

        var selectedValue = obj.getCellText(obj.currentrow, obj.currentcell);

        // ClipBoard 초기화

        system.clearClipboard();

        //선택값 복사.

        system.setClipboard("CF_TEXT", selectedValue);

    }

}

/*++
개요: Grid에서 copy,paset,del 이 작동하게 한다
@name    esm_copy.xjs
@author  허원무
@since   2012.01.10
@remark  복사(ctrl+C) 붙여넣기(ctrl+V) 가능.
@remark  1) 한 cell복사해서 -> 다중셀 선택후 붙여넣기 가능
@remark  2) 다중 cell복사해서 -> 한cell선택후 붙여넣기 : 구역이 붙여넣기됨
@remark  3) 다중 cell선택후 Del키 -> 일괄삭제됨
*/
 

var GRID_VAL_DIV = "\t";

var CLIPBOARD_TYPE = "CF_UNICODETEXT"; // 클립보드에 저장시 데이터 타입

 

/**************************************************************************/
//  ESEST4120XM 복사, 붙여넣기 참조
//
//  copy and paste 사용시 필수 항목..
//  grid selecttype = area
//  grid 에 Dataset이 bind되있어야 함..
//
//  esm_fn_GridPasteVal 사용시  
//  마지막 파라메터로 값 체크할 함수명("func_test" X, func_test O)
//  함수 파라메터 1. grid에 bind된 Dataset
//                  2. Dataset columnID
//                  3. Dataset row index
//                  4. 복사된 값
/**************************************************************************/
 

/******************************************************************************/
/**   popup 메뉴 동적 생성       
 * ★ Function    : esm_fn_SetPopUpMenu
 * ★ 설명        : 그리드이 팝덥메뉴를 동적으로 생성한다.
 * ★ Parameter   : dsObj (바인드된 dataset)
 *                  e GridMouseEventInfo
                    clickEvent 메뉴를 눌렀을때 발생시킬 함수
/******************************************************************************/

function esm_fn_SetPopUpMenu(dsObj:Dataset, e:GridMouseEventInfo, clickEvent:Function)

{

    // 기존에 GridPopMenu id로 등록된 값이 있을 경우 remove 시킨다.

    if(this.all["esmPopMenu"]) {

        this.removeChild("esmPopMenu");

    }

    

    // 팝업메뉴 객체 생성 및 초기화(id, size)

    var popupMenu = new PopupMenu("esmPopMenu", 0, 0 ,0 ,0);

 

    popupMenu.innerdataset = dsObj;

    popupMenu.captioncolumn = "name";

    popupMenu.idcolumn = "id";

    popupMenu.levelcolumn = "lev";

    popupMenu.enablecolumn = "enable";

 

    this.addChild("esmPopMenu", popupMenu);

 

    popupMenu.onmenuclick.setHandler(clickEvent);

    popupMenu.show();

    popupMenu.trackPopup(e.screenX , e.screenY);

}

 

function esm_fn_GridCopyKeyEvent(gridObj:Grid, e:KeyEventInfo, enterFlag){

    var reBool = false;

    enterFlag = gfn_IsNull(enterFlag) ? "key" : enterFlag;

 

    if(e.keycode == 46 || (e.ctrlKey && (e.keycode == "67" || e.keycode == "86")))

    { gridObj.autoenter = "none"; }

    

    if(e.keycode == 46){

        reBool = true;

        esm_fn_DelGridArea(gridObj);

    }

    

    if(e.ctrlKey) {

        if(e.keycode == 67) {

            reBool = true;

            esm_fn_GridCopyVal(gridObj);

        }else if(e.keycode == 86){

            reBool = true;

            esm_fn_GridPasteVal(gridObj);   

        }

    }

 

    gridObj.autoenter = enterFlag;

    return reBool;

}

 

function esm_fn_DelGridArea(gridObj:Grid){

    if(gridObj.selecttype == "row"){ return; }

    var colId;

    var editType;

    var objDs = eval(gridObj.binddataset);

    

    var sRow = toNumber(gridObj.selectstartrow);

    var eRow = toNumber(gridObj.selectendrow);

    var sCol = toNumber(gridObj.selectstartcol);

    var eCol = toNumber(gridObj.selectendcol);

    

    for (var i = sRow; i <= eRow; i++)

    {

        for (var z = sCol; z <= eCol; z++)

        {

            /* ------------------------------------------------------

                삭제 항목에서 제외되는 경우

                    1) edittype이 null, none일 경우

                    2) 컬럼이 숨겨져 있을 경우(size <= 0 )

                    3) 공종(Title)

                    4) 표준내역중  내역명, 규격명, 단위명

            --------------------------------------------------------- */            

            editType = gridObj.getCellProperty("Body", z, "edittype");

            

            if(gfn_IsNull(editType) || editType == "none")                        { continue; }

          //if(!gfn_IsNull(objDs.getColumn(i, "title")))                          { continue; } 

            if(toNumber(gridObj.getFormatColProperty(z, "size")) <= 0)            { continue; }

            

            colId    = gridObj.getCellProperty("Body", z, "text").replace("bind:", "");

            

            if(!gfn_IsNull(objDs.getColumn(i, "brkdnCd"))){

                if(gfn_IsNull(colId))                                             { continue; }

                if(colId == "brkdnNm" || colId == "normNm" || colId == "unitNm")  { continue; }

            }

            

            objDs.setColumn(i, colId, "");

        }

    }

}

 

function fn_GetSelectCk(sRow, eRow, sCol, eCol){

    if(sRow <= -1 || eRow <= -1 || sCol <= -1 || eCol <= -1){ return false; }

    return true;

}

 

/******************************************************************************/
/**   grid value copy         
 * ★ Function    : esm_fn_GridCopyVal
 * ★ 설명        : 그리드에서 영역을 선택하여 복사한다.
 * ★ Parameter   : gridObj (그리드)
 *                  dstObj (바인드된 dataset)                    
/******************************************************************************/

function esm_fn_GridCopyVal(gridObj:Grid){

    if(gridObj.selecttype != "area") return;    

    // 임시 데이터셋에 넣을 값을 포멧형식에 맞쳐서 넣는 변수...

    var sVal;

    var result = "";   

    var sRow = toNumber(gridObj.selectstartrow);

    var eRow = toNumber(gridObj.selectendrow);

    var sCol = toNumber(gridObj.selectstartcol);

    var eCol = toNumber(gridObj.selectendcol);

    

    if(!fn_GetSelectCk(sRow, eRow, sCol, eCol)) return false;

    

    for (var i = sRow; i<=eRow; i++) {

        for (var z = sCol; z<=eCol; z++) {

            // 항목 보기 이벤트가발생할 경우 건너띄워야 한다.

            if(toNumber(gridObj.getFormatColProperty(z, "size")) > 0){

                if(gridObj.getCellProperty("Body", z, "edittype") == "combo")

                { result += esm_fn_GetDataCode("date", gridObj, z, gridObj.getCellValue(i,z)); }

                

                else

                { result += gridObj.getCellValue(i,z); }                

                

                if(z < gridObj.selectendcol) result += GRID_VAL_DIV;

            }

        }

        if (i < gridObj.selectendrow) {

            result += "\r\n";

        }

    }

    result += "\r\n";

    

    //20120927권창진(past시 누락되서 삭제) result = result.trimRight("\r\n");

    

    // 복사 전 이전에 사용된 clipboard 내용을 지운다.

    system.clearClipboard();

    //CF_CSV 타입으로 저장한다.

    system.setClipboard(CLIPBOARD_TYPE, result);

}

 

/******************************************************************************/
/**   grid value paste         
 * ★ Function    : esm_fn_tempDatasetCreate
 * ★ 설명        : 복사된 값을 임시 데이터셋에 저장한다.
/******************************************************************************/

function esm_fn_tempDatasetCreate(){

    // 임시 데이터 셋을 생성한다.

    var dsObj = new Dataset();

    

    //임시 데이터셋 삭제 후 추가

    if(this.all["ds_tempHWM"])

    { this.removeChild("ds_tempHWM"); }

    this.addChild("ds_tempHWM", dsObj);

 

    var sVal;

    var arrCol;

    var nRow = 0;

    var copyVal = system.getClipboard(CLIPBOARD_TYPE);

    

    if(copyVal == null)

    { return false; }

    

    copyVal = new String(copyVal);

    copyVal = copyVal.split("\r\n");

    

    var max = (copyVal.length == 1) ? copyVal.length : copyVal.length - 1;

 

    // 한줄이 하나의 row가 되므로 \n를 기준으로 row를 나눈다.

    for(var i = 0; i < max; i ++){

        // ','를 기점으로 column(temp_col + index)를 생성하고 값을 저장한다.

        arrCol = copyVal[i].split(GRID_VAL_DIV);

        for(var z = 0; z < arrCol.length; z++){

            // 컬럼 추가는 첫번째 row가 생성될 때에만 생성된다.

            if(i == 0){ dsObj.addColumn("tempCol" + eval(z),"String"); }

            

            // row는 한줄이 생성될 때에만 생성된다.

            // 마지막 컬럼값에 스페이스 영역이 들어와(test결과) trim를 사용

            if(z == 0){ nRow = dsObj.addRow(); }

 

            arrCol[z] = arrCol[z].trim();

            arrCol[z] = (arrCol[z] == "undefined") ? "" : arrCol[z];

            arrCol[z] = arrCol[z].replace("\"", "");

 

            dsObj.setColumn(nRow, "tempCol" + eval(z), arrCol[z]);

        }

    }

    ds_tempHWM.name = "tempDS";

    //trace(dsObj.saveXML());

    return true;

}

 

/******************************************************************************/
/**   grid value paste         
 * ★ Function    : esm_fn_GridPasteVal
 * ★ 설명        : 복사된 값을 붙여넣는다.
 * ★ Parameter   : gridObj (그리드)
 *                  dstObj (바인드된 dataset)      
                    setPasteFunc (붙여넣기 할 함수 - 개발자 부분)
/******************************************************************************/

function esm_fn_GridPasteVal(gridObj:Grid, preFunc){

    if(gridObj.selecttype != "area") return;

    // 임시 테이타셋에 저장한다.

    if(!esm_fn_tempDatasetCreate()) return false;

    

    var dsObj = gridObj.binddataset;

        dsObj = gfn_IsNull(dsObj) ? "noDataset" : eval(dsObj);

    

    if(dsObj == "noDataset"){

        if (gsLocale == LANG_MODE_KR) {    // 한글모드

            gfn_Alert("그리드의 Bind된 Dataset이 존재 하지 않습니다.");

        } else {

            gfn_Alert("There is not a dataset to be bound to the grid.");

        }

        

        return false;

    };

    

    // 임시 테이타셋을 변수에 넣고 정보를 삭제한다.

    var tempDS = ds_tempHWM;

    if(this.all["ds_tempHWM"]){

        this.removeChild("ds_tempHWM");

    }

 

    var flag;

    var arrCol;

    var colInfo;

    var sRow = toNumber(gridObj.selectstartrow);

    var eRow = toNumber(gridObj.selectendrow);

    var sCol = toNumber(gridObj.selectstartcol);

    var eCol = toNumber(gridObj.selectendcol);

    

    if(!fn_GetSelectCk(sRow, eRow, sCol, eCol)) return false;

        

    if(tempDS.getRowCount() == 1 && tempDS.getColCount() == 1){

        flag = "oneRow";

        colInfo = esm_fn_GetArrColID(gridObj, sCol, eCol, flag);

    }

    else if(tempDS.getRowCount() >= 1){

        flag = "moreRow";

        colInfo = esm_fn_GetArrColID(gridObj, sCol, tempDS.getColCount(), flag);

    }

 

    arrCol      = colInfo.getColId;

    arrColIndex = colInfo.getColIndex;

 

    if(flag == "moreRow")

    {

        for(var i = 0; i < tempDS.getRowCount(); i++){

            for(var z = 0; z < arrCol.length; z++){

                if(arrCol[z] == "_noCol") continue;

                if(!gfn_IsNull(preFunc))

                { if(!eval(preFunc(dsObj, arrCol[z], sRow, tempDS.getColumn(i, z)))) continue; }

                

                esm_fn_SetPasteData(gridObj, tempDS, dsObj, arrCol[z], arrColIndex[z], i, z, sRow);

            }

            sRow++;

        }

    }

    else

    {

        while(true){

            if(sRow > eRow) break;

            for(var i = 0; i < arrCol.length; i++){

            

                if(arrCol[i] == "_noCol") continue;

                if(!gfn_IsNull(preFunc))

                { if(!eval(preFunc(dsObj, arrCol[i], sRow, tempDS.getColumn(0, 0)))) continue; }

                

                esm_fn_SetPasteData(gridObj, tempDS, dsObj, arrCol[i], arrColIndex[i], 0, 0, sRow);

                

            }

            sRow++;

        }

    }

}

 

function esm_fn_SetNumberVal(nVal){

    var sCharAt;

    var resultVal = "";

 

    for(var i = 0; i < nVal.length; i++){

        sCharAt = toNumber( gfn_CharAt(nVal, i) );

 

        if(gfn_IsNumber(sCharAt) && !isNaN(sCharAt))

        { resultVal += sCharAt; }

    }

    

    return resultVal;

}

 

function esm_fn_SetPasteData(gridObj, tempDS, dsObj, colId, colIndex, tempDsRow, tempDsCol, nRow, endFlag){

    var nVal = tempDS.getColumn(tempDsRow, tempDsCol);

    

    if(dsObj.getColumnInfo(colId).type != "STRING"){

        nVal = nVal.replace(",", "");

 

        if(!gfn_IsNumber(nVal))

        { nVal = esm_fn_SetNumberVal(nVal); }

 

        tempDS.setColumn(tempDsRow, tempDsCol, nVal);

    }

    

    if(gridObj.getCellProperty("Body", colIndex, "edittype") == "combo"){

        nVal = tempDS.getColumn(tempDsRow, tempDsCol);

        nVal = esm_fn_GetDataCode("code", gridObj, colIndex, nVal);

        tempDS.setColumn(tempDsRow, tempDsCol, nVal);

    }

    

    dsObj.rowposition = nRow;

    dsObj.setColumn(nRow, colId, tempDS.getColumn(tempDsRow, tempDsCol));

    

    if(gridObj.getCellProperty("Body", colIndex, "edittype") == "combo"){

        nVal = tempDS.getColumn(tempDsRow, tempDsCol);

        nVal = esm_fn_GetDataCode("data", gridObj, colIndex, nVal);

        tempDS.setColumn(tempDsRow, tempDsCol, nVal);

    }   

}

 

function esm_fn_GetDataCode(flag, grdiObj:Grid, colIndex, sData){

    var rtnVal;

    var vDs  = eval(grdiObj.getCellProperty("Body", colIndex, "combodataset"));

    var code = grdiObj.getCellProperty("Body", colIndex, "combocodecol");

    var data = grdiObj.getCellProperty("Body", colIndex, "combodatacol");

    

    if(gfn_IsNull(vDs) || gfn_IsNull(code) || gfn_IsNull(data)) return null;

    

    if(flag == "code")

    { rtnVal = vDs.lookup(data, sData, code); }

    else

    { rtnVal = vDs.lookup(code, sData, data); }

    

    return gfn_IsNull(rtnVal) ? null : rtnVal;

}

 

//시작 컬럼부터 Dataset의 컬럼명을 가져 온다.

function esm_fn_GetArrColID(grdObj:Grid, nStartCol, nTotCol, flag)

{

    var totCol;

    var index = 0;  

    var colInfo = new Object();

    var result  = new Array();

    var result2 = new Array();

 

    if(flag == "moreRow") totCol = nTotCol;

    else{ totCol = nTotCol - nStartCol + 1; }                 

 

    for(var i = 0; i < totCol; i++){

        if(grdObj.getFormatColProperty(nStartCol, "size") > 0){

            if( grdObj.getCellProperty("Body", nStartCol, "edittype") == "none"

                || gfn_IsNull(grdObj.getCellProperty("Body", nStartCol, "edittype")))

            { result[index] = "_noCol"; }

            else

            { result[index] = grdObj.getCellProperty("Body", nStartCol, "text").replace("bind:", ""); }

            

            result2[index] = nStartCol;

            

            index++;

        }else{ i--; }

        nStartCol++;

        if(nStartCol >= grdObj.getFormatColCount()){ break; }

    }

    

    colInfo.getColId = result;

    colInfo.getColIndex = result2;

    

    return colInfo;

}

 

/******************************************************************************
 * ★ Function명 : esm_fn_grdCopyPaste
 * ★ 설명       : Grid에서 클립보드 Data Ctrl+C(복사), Ctrl+V(붙여넣기) 기능 처리
 * ★ Parameter
 *     1. poGrid: 대상 Grid
 *     2. psKey : KeyEventInfo (Keydown시 입력된 값)
 * ★ Return     : 없음
    - 스크립트 예)  esm_fn_grdCopyPaste(obj, e);
 ******************************************************************************/

function esm_fn_grdCopyPaste(poGrid:Grid, psKey:KeyEventInfo)

{

    var obj = poGrid;

    var e = psKey;

 

    if(e.ctrlKey) {

 

        if(e.keycode == 67) {       // Ctrl + C (복사)

            //Grid Binddataset

            var sGrdDsNm = obj.binddataset;

            var v_clip = "";

            var sSeperate = "   ";

            for (var i=obj.selectstartrow;i<=obj.selectendrow;i++) {

                for (var j=obj.selectstartcol;j<=obj.selectendcol;j++) {

                    if (j < obj.selectendcol) {

                        v_clip += obj.getCellValue(i,j) + sSeperate;

                    } else {

                        v_clip += obj.getCellValue(i,j);

                    }

                }

                if (i < obj.selectendrow) {

                    v_clip += "\r\n";

                }

            }

            v_clip += "\r\n";

            system.clearClipboard();

            system.setClipboard("CF_TEXT",v_clip);  

 

        } else if(e.keycode == 86) {      // Ctrl + V (붙여넣기)

 

            var bAddrow = true;

            if (!gfn_IsNull(esm_fn_grdCopyPaste.arguments[2])) {

                bAddrow = esm_fn_grdCopyPaste.arguments[2];

            }

            //Grid Binddataset

            var sGrdDsNm = obj.binddataset;

            //cell count

            var nGrdCellCnt = obj.getCellCount("body");

            //cell position

            var nGrdCellPos = obj.getCellPos();         

            //row position

            var nRowPos = eval(sGrdDsNm).rowposition;

            //aText2 index

            var k = 0;

            //Dataset rowcount

            var nDsRowCnt = eval(sGrdDsNm).getRowCount();

            

            var t_clip = system.getClipboard("CF_UNICODETEXT");

            var sText = new String(t_clip);

            var aText = new Array();

            var aText2 = new Array();

            aText = sText.split("\r\n");

            if (nDsRowCnt < (aText.length + nRowPos -1)) {

                if (bAddrow) {

                    

                } else {

                    return false;

                }           

            }           

            //복사한 Row만큼

            for (var i=0;i<aText.length;i++) {

                if (gfn_IsNull(aText[i])) {

                    return;

                }

                aText2 = aText[i].split("   ");

 

                //기존 dataset갯수보다 많은 경우

                if ( nDsRowCnt <= nRowPos) {

                    var nAddrow = eval(sGrdDsNm).addRow();

                }

                

                var nLoopCnt = (nGrdCellPos + aText2.length);

                if (nLoopCnt > nGrdCellCnt) {

                    nLoopCnt = nGrdCellCnt;

                }

                //Dataset setcolumn

                for (var j=nGrdCellPos;j<nLoopCnt;j++) {    

                    obj.setCellPos(j);

                    obj.showEditor(true);

                    obj.setEditText(aText2[k]);

                    k++;

                    obj.showEditor(false);

                }               

                nRowPos++;

                eval(sGrdDsNm).rowposition = nRowPos;

                k = 0;

            }

            return true;

        }

    }

}

 

☞  

 

☞  

 
 
 
 

  

'Nexacro-Function > Grid' 카테고리의 다른 글

Nexacro.Grid - treeView  (0) 2017.01.28
Nexacro.Grid - excel exort  (0) 2017.01.28
Nexacro.Grid - Conents Editor  (0) 2017.01.28
Nexacro.Grid - all Checked 처리  (0) 2017.01.28
Nexacro.Grid - grid header  (0) 2017.01.28
Posted by 농부지기
,

[ Nexacro.Grid -  grid Header Merge ]

 

 


/******************************************************************************************
 * 기능 : Grid header Merge 처리
 * 인자 : objDsHeader  - Grid Header와 동일하게 저장된 Dataset
 *         objGrdHeader - Header가 적용된 Dataset (이미 Header는 적용 되어져 있어야 됨
 * 리턴 :
 * 예문 :
 *****************************************************************************************/
//=================================================================================================
//  grid.mergeContentsCell(strBand,nStartRow,nStartCol,nEndRow,nEndCol,nFirstCell,bKeepSubCell)
//  arg : nStartRow,nStartCol,nEndRow,nEndCol - 특징은 cell이 병합 되기 이전 row, index이다.
//                                              즉, header가 merge되어도 이 4개 값은 이 merge 되기전의 index이다.
//        nFirstCell : 은 cell이 병합된 후의 index이다.
//=================================================================================================

function gfn_pivotGridHeaderMerge(objDsHeader, objGrdHeader){    //넘겨받은 dataset을 복사 해서.. 사용함    var objDsPiovotHeader = new Dataset;    objDsPiovotHeader.name = "objDsPiovotHeader";    this.addChild("objDsPiovotHeader", objDsPiovotHeader);    objDsPiovotHeader.copyData(objDsHeader);     var bCellContinue;    var nMergeIdx = 0, sMergeIdx;    var nHeadCellIdx  = 0;    var nRow=0;    var sBaseText, sNextText, sBefText;    var nStartRow,nStartCol,nEndRow,nEndCol,nFirstCell;    var nAllRow = objDsPiovotHeader.rowcount;    var nColCnt = objDsPiovotHeader.getColCount();    var arrMerge = new Array();    var sMaxMergeIdx; //이미 Merge했던 값 들중 가장 큰값        do {        bCellContinue = false;                //--------------------------------------------------------------------------------------
        // 1. sBaseText 찾기 (merge를 시작할 첫번째 텍스트 값)
        //--------------------------------------------------------------------------------------

        nHeadCellIdx = -1;        sMaxMergeIdx = '';        for(var nColIdx=0; nColIdx<nColCnt; nColIdx++){            sBaseText = objDsPiovotHeader.getColumn(nRow, "headCol" + nColIdx);            // if (nMergeIdx == 4) trace('sBaseText > ' + sBaseText);                        // 숫자면.. 이미 merge를 한 cell로 인식
            if (sBaseText >= "-000" && sBaseText <= "-999"){                continue;                            // 문자명.. 다음 merge를 시작한 baseText로 처리
            }else{                nStartRow = nRow;                nStartCol = nColIdx;                nEndRow   = nRow;                nEndCol   = nColIdx;                //if (nMergeIdx == 0) trace( nMergeIdx.toString().padLeft(3, '0'));
                sMergeIdx = '-' + nMergeIdx.toString().padLeft(3, '0');                objDsPiovotHeader.setColumn(nRow, "headCol" + nColIdx, sMergeIdx ); //찾은 baseText cell은 merge를 한걸로 marking
                bCellContinue = true;                break;            }        }         //--------------------------------------------------------------------------------------
        // 2. BaseText가 Merge후에 몇번째 cell인지 찾기(nFirstCell)
        //    그래서, 이 index를 가지고 merge 후 text값으로 지정하기 위해서.
        //--------------------------------------------------------------------------------------

        nHeadCellIdx  = 0;        sBefText     = '';        sMaxMergeIdx = '';        for(var i=0; i<nAllRow; i++){            for(var j=0; j<nColCnt; j++){                sNextText = objDsPiovotHeader.getColumn(i, "headCol" + j);                if (sMergeIdx == sNextText){                    nFirstCell = nHeadCellIdx;                    break;                }else{                    //문자면 무조건 cellIndex증가
                    if (sNextText < "-000" || sNextText > "-999" || (sNextText >= "가" && sNextText <= "힣"))                        nHeadCellIdx++;                                            //숫자면
                    else{                         //숫자가 달라 졌으면서 &&
//                      if (sBefText <> sNextText) nHeadCellIdx ++;
                                                //if (sMaxMergeIdx < sBefText) sMaxMergeIdx = sBefText;
                        
                        //숫자가 달라 졌으면서 && (다음문자 > 가장큰Merge index)이면 cell 증가
                        if (sBefText <> sNextText && sNextText > sMaxMergeIdx )                               nHeadCellIdx ++;                                                if (sMaxMergeIdx < sBefText) sMaxMergeIdx = sBefText;                    }                }                sBefText = sNextText;            }        }                //--------------------------------------------------------------------------------------
        // 3. 한 Row 끝. 다음 Row 처리 여부 결정
        //--------------------------------------------------------------------------------------
        // bCellContinue == false는 .. 작업중인 row에 merge 모두 완료..   그래서 nRow++로 해서 다음row처리
        // bCellContinue == true는  .. 작업중인 row에 header text가 남은 상황. sBaseText값을 기준으로 다음cell에 같은 값이 존재 하는지 계속 검사

        if (bCellContinue == false){            nRow++;            if (nAllRow<=nRow)                 break;            else                continue;        }                //--------------------------------------------------------------------------------------
        // 4. 기준 sBaseText값을 기준으로 동일한 값이 존재 하는 지 검사
        //--------------------------------------------------------------------------------------

        for(var ii=0; ii<nAllRow; ii++){            for(var nCell=0; nCell<nColCnt; nCell++){                sNextText = objDsPiovotHeader.getColumn(ii, "headCol" + nCell);                // if (nMergeIdx == 2)  trace(' sNextText->' + sNextText + '   :: ' + nHeadCellIdx);            
// if (nMergeIdx == 2) trace('row > ' + ii + ' --. ' + nColIdx + ' ::: ' + nCell + ' --> sBaseText :: ' + sBaseText + ' === ' + sNextText);             
 
                // 문자면
                if (sNextText < "-000" || sNextText > "-999" || (sNextText>="가" && sNextText <= "힣")){ // if (nMergeIdx == 2)  trace('row > ' + ii + ' --. ' + nColIdx + ' ::: ' + nCell + ' --> sBaseText :: ' + sBaseText + ' === ' + sNextText);   
                                 if(sBaseText == sNextText && nColIdx <= nCell){ //  if (nMergeIdx == 1) trace('row > ' + ii + ' .. ' + nHeadCellIdx + ' ::: ' + nCell + ' --> sBaseText :: ' + sBaseText + ' === ' + sNextText + ' :: nMergeIdx > ' + nMergeIdx);   
                                     nEndRow = ii;                        nEndCol = nCell;                                                objDsPiovotHeader.setColumn(ii, "headCol" + nCell, sMergeIdx); //찾은 baseText cell은 merge를 한걸로 marking                    }else{                        if (nColIdx <= nCell) break;   //sBaseText의 cell보다 현재 cell이 더 크면 stop                    }                }            }        }        arrMerge[arrMerge.length] = nStartRow + ',' + nStartCol + ',' + nEndRow + ',' + nEndCol + ',' + nFirstCell; //      trace('--------------------------------' + arrMerge[arrMerge.length-1]);
        nMergeIdx++;    }while(true)    //trace(arrMerge);        //--------------------------------------------------------------------------------------
    // 5. Merge 시작
    //--------------------------------------------------------------------------------------

    var arrMergeValue = new Array();    var nEndCell;    for(var idx=0; idx<arrMerge.length; idx++){        arrMergeValue = arrMerge[idx].split(',');                objGrdHeader.mergeContentsCell("Head",arrMergeValue[0], arrMergeValue[1], arrMergeValue[2],arrMergeValue[3], arrMergeValue[4],false);    }        this.removeChild("objDsPiovotHeader");    //  trace(arrMerge);}
 
☞  
 
☞  
 
 
 
 

  

'Nexacro-Grid > Head' 카테고리의 다른 글

Nexacro.Grid.Head 컬럼 Fixed 처리  (0) 2017.10.17
Posted by 농부지기
,

[ Nexacro.Grid -  Conents Editor ]

 

/*==+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 * Group : 2. Conents Editor
 **=++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/


/******************************************************************************************
 * 기능 : Grid에서 컬럼명에 해당하는 값을 찾아서 Retrun
 *         콤보에 보여주는 값도 얻을 수 있음
 * 인자 : objGrid - Grid 명
 *         nRow - row
 *         asColId - 찾을 컬럼명
 * 리턴 : Grid에서 보여주고 있는 Text 값
 * 예문 :
 *****************************************************************************************/

function gfn_GetCellText(objGrid, nRow, asColId){

        return objGrid.getCellText(nRow, gfn_GetColIndex(objGrid, asColId));

}

 

/******************************************************************************************
 * 기능 : 컬럼명(영문명)에 대한 Grid index 찾아서 Return
 * 인자 : objGrid - Grid 명
 *        asColNm - physical Column name
 *        
 * 리턴 : Grid컬럼명에 대한 index
 * 예문 :
 *****************************************************************************************/

function gfn_GetColIndex(objGrid, asColNm)

{

        var nCnt = objGrid.getCellCount("Body");

        var sCurColNm;

        

        for(var i=0; i < nCnt; i++){

                sCurColNm = objGrid.getCellProperty("Body", i, 'text');

                if ('bind:' + asColNm == sCurColNm) return i;

        }

        return '';

}

 

/******************************************************************************************
 * 기능 : Grid의 binding된 컬럼명 찾기
 * 인자 : objGrid - Grid 명
 *         asTextNm - Header title name
 * 리턴 :
 * 예문 : Grid header에 대한 index
 *****************************************************************************************/

function gfn_GetGridColumnId(objGrid, anCell)

{

        var sColId = objGrid.getCellProperty("Body", anCell, "text");

        

        return sColId.replace("bind:", "");

}

 

/******************************************************************************************
 * 기능 : Grid의 특정Cell에 focus 위치시키기
 * 인자 : objGrid - Grid 명
 *         pnRow   - 포커스 갈 Row
 *         psColId - 포커스 갈 컬럼명
 * 리턴 :
 * 예문 :
 *****************************************************************************************/

function gfn_SetGridFocus(objGrd, objDs, pnRow, psColId)

{

    objDs.rowposition = pnRow;  // 오류가 있는 라인으로 이동

    objGrd.setCellPos(objGrd.getBindCellIndex("Body",psColId));

    objGrd.setFocus();

}

 

 

/*******************************************************************************
  ★ 설명
      그리드 삭제 컬럼 전체 체크
  ******************************************************************************/

 function gf_gridDelChk(obj, cellNm, cellIdx)

 {

         var bindDs = eval(obj.binddataset);

         var sTitle, sValue;

         

        sTitle = obj.getCellProperty( "head", cellIdx, "text");

         //sTitle = obj.getCellText(-1, cellIdx);

         

        bindDs.enableevent = false;

         

        if( sTitle == "삭제" )

         {

                 sTitle = "삭제-All";

                 sValue = 1;

                 obj.setCellProperty( "head", cellIdx, "text", sTitle);

                 

                for(idx=0; idx<bindDs.rowcount; idx++)

                 {

                         if( bindDs.getRowType(idx)==Dataset.ROWTYPE_INSERT

                          || bindDs.getRowType(idx)==Dataset.ROWTYPE_UPDATE )

                         {

                                 continue;

                         }

                         bindDs.setColumn(idx,cellNm,sValue);

                 }

         }

         else

         {

                 sTitle = "삭제"

                 sValue = "0";

                 obj.setCellProperty( "head", cellIdx, "text", sTitle);

                 

                for(idx=0; idx<bindDs.rowcount; idx++)

                 {

                         if( bindDs.getRowType(idx)==Dataset.ROWTYPE_INSERT

                          || bindDs.getRowType(idx)==Dataset.ROWTYPE_UPDATE )

                         {

                                 ////trace("continue["+idx+"]::"+ bindDs.getRowType(idx));

                                 if(bindDs.getColumn(idx,cellIdx-1)=="수정" || bindDs.getColumn(idx,cellIdx-1)=="입력" )

                                 {

                                         continue;

                                 }

                         }

                         bindDs.setColumn(idx,cellNm,sValue);

                 }

         }

         

        bindDs.enableevent = true;                

}

 

/*******************************************************************************
  ★ 설명
      Grid Column Head Fix 하는 함수(Header Fix 컬러 변경)
  ★ parameter
    1. obj:Grid : Grid Object ( 예 : Grid00 )
     2. nCellIdx : Click Event Object ( Grid Col Index )
     
 ★ return
    - 성공 = true
     - 실패 = false
  ******************************************************************************/

function gf_gridColFix(obj:Grid, nCellIdx, sFixColor)

 {

 //trace( "gf_gridColFix["+nCellIdx+"/"+obj.getCellCount("Head")+"] ");

         var nCell;

         var sDefaultFixColor = "lightgrey";

         var sDefaultBgImage = "URL('img::img_GridPil.png')";

         

        for(nCell = 0; nCell <= nCellIdx; nCell++)

        {

                 //obj.setFormatColProperty(nCell,"fix","");

                 obj.setFormatColProperty(nCell,"band","");

                 

                if( obj.getFormatColProperty(nCell,"band") == "right" ) break;

                 

                var bgProp = ""+obj.getCellProperty("head",nCell,"background");

                 ////trace( "bgProp : " + obj.getCellProperty("head",nCell,"background") );

                 if( nCell <= nCellIdx )

                 {

                         ////trace( "nCell : " + nCell );

                         obj.setFormatColProperty(nCell,"band","left");

                         if(bgProp==null || bgProp=="")

                         {

                                 obj.setCellProperty("head",nCell,"background",sDefaultFixColor);

                         }

                         else if(sDefaultBgImage.indexOf(bgProp)!=-1 || sDefaultFixColor.indexOf(bgProp)!=-1)

                         {

                                 obj.setCellProperty("head",nCell,"background",sDefaultFixColor + " " + bgProp);

                         }

                         else

                         {

                                 ////trace("nCel/IdxnCell ["+nCellIdx+"/" + nCell +"]="+bgProp);

                                 obj.setCellProperty("head",nCell,"background",sDefaultFixColor);

                         }

                 }

                else

                 {

                         obj.setFormatColProperty(nCell,"band","body");

                         

                        if(bgProp==null || bgProp=="")

                         {

                                 obj.setCellProperty("head",nCell,"background","");

                        }

                         else if(bgProp.indexOf(sDefaultBgImage)!=-1)

                         {

                                 obj.setCellProperty("head",nCell,"background",obj.getCellProperty("head",nCell,"background"));

                        }

                         else

                         {

                                 obj.setCellProperty("head",nCell,"background","");

                         }                       

                }

                //trace("background["+nCell+"] ===========>"+obj.getCellProperty("head",nCell,"background"));

         }

 }

 

/*******************************************************************************
  ★ 설명
      Grid Column Head Fix 해제 하는 함수(Header Fix 컬러 변경)
  ★ parameter
    1. obj:Grid : Grid Object ( 예 : Grid00 )
    2. nCellIdx : Click Event Object ( Grid Col Index )
    3. nStartIdx : 기본 Fix Column Index
  ******************************************************************************/

function gf_gridColFixFree(obj:Grid, nCellIdx, nStartIdx)

 {

 //trace( "gf_gridColFixFree["+nCellIdx+"/"+nStartIdx+"] ");

         var nCell;

         var sDefaultFixColor = "lightgrey";

         var sDefaultBgImage = "URL('img::img_GridPil.png')";

         

        var nStart = obj.getCellCount("Head") - 1;

         

        //for(nCell = obj.getCellCount("Head"); nCell > 0 ; nCell--)

        for(nCell = nStart; nCell > nStartIdx ; nCell--)

        {

                 if( obj.getFormatColProperty(nCell,"band") == "right" || obj.getFormatColProperty(nCell,"band") == "body" )

                        continue;

 

                //gridObj.setFormatColProperty(nCell-1,"fix","");

                 obj.setFormatColProperty(nCell,"band","body");

 

                var bgProp = ""+obj.getCellProperty("head",nCell,"background");

                 

                //trace( "["+nCell+"/"+bgProp.indexOf(sDefaultBgImage)+"] "+sDefaultBgImage+"   // bgProp = " + obj.getCellProperty("head",nCell,"background") );

                 if(bgProp==null || bgProp=="")

                 {

                         obj.setCellProperty("head",nCell,"background","");

                 }

                 else if(bgProp.indexOf("URL")!=-1)

                 {

                        obj.setCellProperty("head",nCell,"background",sDefaultBgImage);

                 }

                 else

                 {

                         obj.setCellProperty("head",nCell,"background","");

                 }       

                //trace("background["+nCell+"/"+nStartIdx+"] =========== "+obj.getCellProperty("head",nCell,"background"));

         }

        

}

☞  

 

☞  

 
 
 
 

  

 

'Nexacro-Function > Grid' 카테고리의 다른 글

Nexacro.Grid - treeView  (0) 2017.01.28
Nexacro.Grid - excel exort  (0) 2017.01.28
Nexacro.Grid - copy & paste  (0) 2017.01.28
Nexacro.Grid - all Checked 처리  (0) 2017.01.28
Nexacro.Grid - grid header  (0) 2017.01.28
Posted by 농부지기
,

[ Nexacro.Grid -  all Checked 처리 ]

 

 

                  [  ◎ Grid에서 전체 CheckBox클릭 시 모두 Check처리 ]     


/******************************************************************************************
 * 기능 : 그리드 헤드 클릭시 전체체크
 *        전체ROW 체크시 해당ROW의 특정컬럼이 값이 특정값일 경우만 체크처리도 됨
 * 인자 : obj     : Grid Object
 *        e       : GridClickEventInfo
 *        asColId : 찾을 컬럼명
 *        psExpr  : 전체 체크시 제외되어야할 함수명 또는 표현식
 *        paColId : 컬럼배열목록
 * 리턴 : none
 * 예문 : gfn_SetGridCheckAll(obj, e, "USE_CNT==0 && ST_CD=='KC'", ["USE_CNT","ST_CD"]);
 *         USE_CNT 컬럼 값이 0일 이면서(AND) ST_CD값이 ='KC' 인 경우만 체크 한다.
 *
- 그리드 헤드 예) <Cell displaytype="checkbox" edittype="checkbox" text="expr:0"/> 로 해야함.
 *****************************************************************************************/

function gfn_SetGridCheckAll(obj:Grid, e:GridClickEventInfo, psExpr, paColId)
{
    
if (obj.readonly == true) return;
    
var strType;
    
var vl_chk;
    
var strVal;
    
var strChkVal;
    
var objDS;
    
var nCell  = gfn_getHeadToBodyCell(obj,e.cell);
    
var nSubCnt = obj.getSubCellCount("head",nCell);

    objDS  = eval(obj.binddataset);
    strChkVal = gfn_BlankStr(obj.getCellProperty("
body", nCell, "text"));
    strChkVal = strChkVal.replace("bind:", "");
 
    
if (nSubCnt > 0) // Merge한 셀이 있는 경우
    {
        var nChkIdx = -1;
        for (var i = 0; i < nSubCnt; i++) {
            strType = obj.getSubCellProperty("
head",e.cell,i,"displaytype");
 
            if (strType == "checkbox") {
                nChkIdx =  i;
                
break;
            }
        }
        
if (nChkIdx == -1)
            
return;
 
        // Head셋팅
        strVal = obj.getSubCellProperty("
head", nCell, nChkIdx, "text");
        
if (gfn_IsNull(strVal)) strVal = "0";
 
        
if (strVal == "0") {
            obj.setSubCellProperty("
head",nCell,nChkIdx,"text", '1');
            vl_chk="1";
        } else {
            obj.setSubCellProperty("
head",nCell,nChkIdx,"text", '0');
            vl_chk="0";
        }
 
    }
    else // Merge한 셀이 없는 경우
    {
        strType = obj.getCellProperty("
head", e.cell, "displaytype");
 
        
if (strType != "checkbox") {
            
return;
        }
 
        // Head셋팅
        strVal = obj.getCellProperty("
head", nCell, "text");
        
if (gfn_IsNull(strVal)) strVal = "0";
        
        
if (strVal == "0") {
            obj.setCellProperty("
head", nCell, "text", '1');
            vl_chk="1";
        } else {
            obj.setCellProperty("
head", nCell, "text", '0');
            vl_chk="0";
        }
    }
    
    // Body셋팅
    
for (var i=0; i< objDS.rowcount; i++) {
        
if (gfn_ExistVal(psExpr)){
            var chkExpr = psExpr;
            for(var kk=0; kk<paColId.length; kk++){
                var sValue = gfn_BlankStr(objDS.getColumn(i, paColId[kk]));
                chkExpr = chkExpr.replace(paColId[kk], sValue);
            }
            
if (eval(chkExpr)){
                objDS.setColumn(i, strChkVal, vl_chk);
            }
        }
else{
            objDS.setColumn(i, strChkVal, vl_chk);
        }  
    }
}

 

☞  

 
 

 

--  아래는 위 function에서 필요한  공통함수들 임 --

 

/*++

프로그램 설명     : 클릭한 그리드 헤드에서 cell 정보를 가져온다.

@ Name            : cfn_getHeadToBodyCell

@ Parameter       : oGrid : Grid Object

@ Parameter       : e     : GridClickEventInfo

@ Return          : Cell Index

*/

function gfn_getHeadToBodyCell(oGrid:Grid,nCell)

{

    var sBand ="body";

    var nBodyCell  = oGrid.getCellProperty("head",nCell,"col");

    var nHeadRow   = oGrid.getCellProperty("head",nCell,"row");

    var nCellCount = oGrid.getCellCount(sBand);

    var nColCount  = oGrid.getFormatColCount();

    

    if (nHeadRow > 0 && nCellCount > nColCount) {

        return nCell;

    }

    

    for (var nCellIdx = 0; nCellIdx <nCellCount; nCellIdx++) {

        if (nBodyCell == oGrid.getCellProperty(sBand,nCellIdx,"col")) {

            nBodyCell = nCellIdx;

            break;

        }

    }

 

    return nBodyCell;

}

 

 

 

 

/////////////////////////////////////////////////////////////////

// method name  : cfn_BlankStr

// description  : 값이 존재하는지 여부 체크

// parameter    : oParam (object나 문자열)

// return       : undefined이면 ""(널 스트링)

// example      :

/////////////////////////////////////////////////////////////////

function cfn_BlankStr(oParam) {

 

    var strParam = new String(oParam);

    if(strParam.valueOf() == "undefined") {

        return "";

    }

 

    return oParam;

}

'Nexacro-Function > Grid' 카테고리의 다른 글

Nexacro.Grid - treeView  (0) 2017.01.28
Nexacro.Grid - excel exort  (0) 2017.01.28
Nexacro.Grid - copy & paste  (0) 2017.01.28
Nexacro.Grid - Conents Editor  (0) 2017.01.28
Nexacro.Grid - grid header  (0) 2017.01.28
Posted by 농부지기
,