프레임워크/Nexacro

[넥사크로 N] 심화편

proApril 2023. 3. 22. 10:11

넥사크로N 교육 심화편

1. prefix로 해야함. 풀 경로를 쓰면 안된다. 상대경로도 안됨

 

2.

session - 어플리케이션 시작해서 최초로 값 가져오고 그 뒤로는 캐시로 받아옴.

dynamic - 스테틱과 세션 그 사이

static - 계속 캐시에 있는 것을 올려줌

 

3.

JSP 의 경우 항상 NONE으로 서비스 설정을 해야한다.

 

4.

transaction에서 n개의 dataset를 가져올 수 있다.

여러개 불러올수있으니 꼭 써야한다.

 

단, 스페이스바 주의 !

예시) this.transaction("....",".....","ds_dept=out_dept ds_pos=out_pos")

 

5.

getSum("SALARY") -> getSum("nexacro.toNumber(SALARY)")

 

6. 

Sort는 형 변환 불가

그렇다면 어떻게..? useclientlayout true 설정

 

7.

프로퍼티 set

this.ds.set_enableevent(false); // 데이터셋을 잠시 멈추는것

~~~

this.ds.set_enableevent(true;

 

8.

데이터셋 필터는

onrowchanged를 사용 

클릭이벤트같은건 사용x 키보드로 누르는 경우도있으니

 

9.

데이터셋관련

// Exercise 1 ================================================================
// Exe 1-1
this.btn_Exe1_1_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	var nColCount = this.Dataset1.getColCount(); // this.Dataset1.colcount;
	var nRowCount = this.Dataset1.getRowCount(); // this.Dataset1.rowcount;
	trace("Col Count=" + nColCount + " : Row Count=" + nRowCount);	
	
	this.txtRtn1.set_value("Col Count=" + nColCount + " : Row Count=" + nRowCount);
    
	for(var i=0; i<nColCount; i++){
		/*var sColID = this.Dataset1.getColID(i);*/
		var objCol = this.Dataset1.getColumnInfo(i);
		trace("Col ID=" + objCol.id +":"+ objCol.type +":"+objCol.size);
	}

};

// Exe 1-2
this.btn_Exe1_2_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.Dataset1.addColumn("COL_CHK", "STRING");
};

// Exercise 2 ================================================================
// Exe 2-1
this.btn_Exe2_1_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	var nRow = this.Dataset1.findRow("EMPL_ID", "KR120");
	var sVal = this.Dataset1.getColumn(nRow, "FULL_NAME");
	var sVal = this.Dataset1.lookup("EMPL_ID","KR120","FULL_NAME");
    trace(sVal);	
	this.txtRtn1.set_value(sVal);	
};

// Exe 2-2
this.btn_Exe2_2_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	var nRow = this.Dataset1.findRowExpr("DEPT_CODE == 'K10' && SALARY <= 5000");
	var sVal = this.Dataset1.getColumn(nRow, "FULL_NAME");
	trace(sVal);	
	this.txtRtn1.set_value(sVal);	
};

// Exe 2-3
this.btn_Exe2_3_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	var sText = "";
	var arrRow = this.Dataset1.extractRows("DEPT_CODE=='K10'");
	for(var i=0; i<arrRow.length; i++){
		var sValue = this.Dataset1.getColumn(arrRow[i], "FULL_NAME");
		trace(sValue);
		sText += sValue + "\n";
	}
	
	this.txtRtn1.set_value(sText);
	// 2-3 extractRows -> findRow 함수로 변경한다면? 
	// var nCnt = this.Dataset1.getRowCount();   //iCnt 변수로 건수를 받아서 체크
	// for(var i=0;i<nCnt; i++){ 
	//     var nRow = this.Dataset1.findRow("DEPT_CODE","K10", i,-1);  //<-- startrow, endrow
	//     if(nRow >= 0){
	//         i = nRow ;
	//         trace(nRow + "===" + i + "==" + this.Dataset1.getColumn(i,"FULL_NAME"));
	//     }
	// } 
};



// Exercise 3 ================================================================
// Exe 3-1
this.btn_Exe3_1_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	var nAvgM  = this.Dataset1.getCaseAvg("GENDER=='M'", "SALARY");
	var nAvgW1 = this.Dataset1.getCaseAvg("GENDER=='W'", "SALARY");
	var nAvgW2 = this.Dataset1.getCaseAvg("GENDER=='W'", "SALARY",0, -1, false); //F1 눌러 설명서에서 확인가능
	trace("Man Avg=" + Math.round(nAvgM, 2) + " : Woman Avg=" + nAvgW1 + " : " + nAvgW2);
	this.txtRtn1.set_value("Man Avg=" + Math.round(nAvgM, 2) + " : Woman Avg=" + nAvgW1 + " : " + nAvgW2);
};

// Exe 3-2
this.btn_Exe3_2_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	var nAvg = this.Dataset1.getAvg("SALARY+BONUS");
	trace("Salary+Bonus AVG=" + nAvg);
	this.txtRtn1.set_value("Salary+Bonus AVG=" + nAvg);
};

// Exe 3-3
this.btn_Exe3_3_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.Dataset1.set_keystring("S:-HIRE_DATE");	//+ 오름차순 - 내림차순
};

// Exe 3-4
this.btn_Exe3_4_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.Dataset1.filter("GENDER == 'M' && MARRIED == '0'");	
};

// Exe 3-5
this.btn_Exe3_5_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	var nCnt   = this.Dataset1.getRowCount();
	var nCntNF = this.Dataset1.getRowCountNF(); // NOT FILTERED 
	trace(nCnt + " : " + nCntNF);
	this.txtRtn1.set_value(nCnt + " : " + nCntNF);
};


this.btn_Exe3_Filter_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
    // like filter --> String.indexOf()
	var sText = "e";
// 	this.Dataset1.filter("FULL_NAME.toUpperCase().indexOf('"+
// 					sText.toUpperCase() +"')>= 0");
	this.Dataset1.filter("String(FULL_NAME).toUpperCase().indexOf('" +
				nexacro.replaceAll(sText,"'","\\'").toUpperCase() + "')>=0");
};


// Exercise 4 ================================================================
// Exe 4-1
this.btn_Exe4_1_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	var nRow  = this.Dataset4.insertRow(0); // 원하는 로우에 삽입. 맨마지막이라면? addRow사용
	var nType = this.Dataset4.getRowType(nRow); // 로우 상태값을 가지고있다.
	trace("Insert Rowtype: " + nType);
	this.txtRtn2.set_value("Insert Rowtype: " + nType);
};

// Exe 4-2
this.btn_Exe4_2_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.Dataset4.setColumn(1, "FULL_NAME", "Nexacro");
	var nType = this.Dataset4.getRowType(1);
	trace("Update Rowtype: " + nType);
	this.txtRtn2.set_value("Update Rowtype: " + nType);
};

// Exe 4-3
this.btn_Exe4_3_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	var sCurData = this.Dataset4.getColumn(1, "FULL_NAME");
	var sOrgData = this.Dataset4.getOrgColumn(1, "FULL_NAME");	// 변경되기 전 값
	trace("Cur Data=" + sCurData + " : Org Data=" + sOrgData);	   
	this.txtRtn2.set_value("Cur Data=" + sCurData + " : Org Data=" + sOrgData);
};

// Exe 4-4
this.btn_Exe4_4_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	var arrRow = [3,4,5]; 
 	this.Dataset4.deleteMultiRows(arrRow); //그런데 5,4,3 순으로 삭제됨
	// 4-4 deleteMultiRows -> deleteRow 함수로 변경한다면? 
	// var iCnt = this.Dataset4.getRowCount();
	// this.Dataset4.set_enableevent(false);
	// for(var i=iCnt;i>=0;i--)
	// {
	//     this.Dataset4.deleteRow(i);
	// }
	// this.Dataset4.set_enableevent(true);

};

// Exe 4-5
this.btn_Exe4_5_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	var nDelCnt  = this.Dataset4.getDeletedRowCount();	
	var sDelData = this.Dataset4.getDeletedColumn(0, "FULL_NAME");
	trace("Del Count=" + nDelCnt + " Del Data=" + sDelData);	
	this.txtRtn2.set_value("Del Count=" + nDelCnt + " Del Data=" + sDelData);	
	
// 	var arrDel = this.Dataset4.getDeletedRowset();
// 	trace(arrDel[0]);
	
	
};


// Exe4 - Data Check
this.btn_Exe4_Check_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	var rtn = this.fn_dataCheck(this.Dataset4);
	alert(rtn);
};

this.fn_dataCheck = function(obiDs){
	if(objDs.getDeletedRowCount0 > 0){
		return true;
	}
	for(var i=O; cobiDs.rowcount; i++){
		
		var nRowType = objDs.getRowType(i);
		if(nRowType == 2 || nRowType == 4){
			return true;
		}
		
	}
	return false;
};

// Exercise 5 ================================================================
// Exe 5-1
this.btn_Exe5_1_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.Dataset5.copyData(this.Dataset4);
	this.Grid5.createFormat();
	this.Grid5.setRealRowSize(-1, 32);
	this.Grid5.setRealRowSize(0, 32);
};

// Exe 5-2
this.btn_Exe5_2_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.Dataset5.assign(this.Dataset4);
	this.Grid5.createFormat();
	this.Grid5.setRealRowSize(-1, 32);
	this.Grid5.setRealRowSize(0, 32);
};

// Exe 5-3
this.btn_Exe5_3_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	var nFromRow = this.Dataset4.findRow("EMPL_ID", "KR040");
	var nToRow   = this.Dataset5.addRow();
	this.Dataset5.copyRow(nToRow, this.Dataset4, nFromRow);	
};

// Exe 5-4
this.btn_Exe5_4_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	var nFromRow = this.Dataset4.findRow("EMPL_ID", "KR210");
	var nToRow   = this.Dataset5.addRow();
	var sCol = "EMPL_ID=EMPL_ID, FULL_NAME=FULL_NAME";	
	this.Dataset5.copyRow(nToRow, this.Dataset4, nFromRow, sCol);
};


// Exercise 6 ================================================================
this.Dataset6_cancolumnchange = function(obj:nexacro.NormalDataset,e:nexacro.DSColChangeEventInfo)
{
	trace("cancolumnchange");  // can에서 수정값 체크후 반영하면 oncolumnchanged로 넘어감.
};

this.Dataset6_oncolumnchanged = function(obj:nexacro.NormalDataset,e:nexacro.DSColChangeEventInfo)
{
	trace("oncolumnchanged");
};

// Exe 6-3
this.btn_Exe6_3_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.Dataset6.setColumn(0, "FULL_NAME", "Modify1"); // 이후 Dataset6_cancolumnchange Dataset6_oncolumnchanged
};

// Exe 6-5
this.btn_Exe6_5_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.Dataset6.set_enableevent(false);
	for(var i =0; i<10; i++){
		this.Dataset6.setColumn(I, "FULL_NAME", "Modify2");
	}
	this.Dataset6.set_enableevent(true);
	
};

this.Exe_Chap1_Dataset_onbeforeclose = function(obj:nexacro.Form,e:nexacro.CloseEventInfo)
{
	if(this.fn_dataCheck(this.Dataset4))
	{
		return "변경된 데이터가 존재합니다. 닫으시겠습니까?";  //confirm처리를 알아서해준다. onbeforeclose에선.
	}
};

this.Button00_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	for(var i=0;i<this.Dataset5.rowcount;i++){
		trace(this.Dataset5.getRowType(i));
	}
};

 

10.

// Exercise 1 ================================================================
// Exe 1-1
this.btn_Exe1_1_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	var nColCnt1  = this.Grid1.getFormatColCount();
	var nCellCnt1 = this.Grid1.getCellCount("body");

	var nColCnt1_1  = this.Grid1_1.getFormatColCount();
	var nCellCnt1_1 = this.Grid1_1.getCellCount("body");

	trace("Grid1 Col=" + nColCnt1 + " : Cell=" + nCellCnt1);
	trace("Grid1_1 Col=" + nColCnt1_1 + " : Cell=" + nCellCnt1_1);
};

// Exe 1-2
this.Grid_oncellclick = function(obj:nexacro.Grid,e:nexacro.GridClickEventInfo)
{
	trace(" e.col=" + e.col + " : e.cell=" + e.cell);	
};

// Exe 1-3
this.btn_Exe1_3_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	var nCellCnt = this.Grid1.getCellCount("body");
	for(var i=0; i<nCellCnt; i++)
	{
		var sColID = this.Grid1.getCellProperty("body", i, "text");
		trace(sColID);
		var arrCol = sColID.split(":");
		trace("ColumnID=" + arrCol[1]);
	}	    
};

// Exe Sort
this.Grid1_onheadclick = function(obj:nexacro.Grid,e:nexacro.GridClickEventInfo)
{
// 	var sColID = this.Grid1.getCellProperty("body", e.cell, "text");
// 	trace(sColID);
// 	var arrCol = sColID.split(":");
// 	var objDs = obj.getBindDataset() // sort는 데이터셋을 시키는것.
// 	objDs.set_keystring("S:+"+arrCol[1]); // sort 방법
	
	this.fn_sort(obj,e);
};

// Exercise 2 ================================================================
// Exe 2-1
this.btn_Exe2_1_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.Dataset2.addColumn("COL_CHK", "STRING");	
	this.Dataset2.set_enableevent(false);
	for(var i=0; i<this.Dataset2.rowcount; i++){
		this.Dataset2.setColumn(i, "COL_CHK", "0");
	}	

	this.Dataset2.set_enableevent(true);
	
	this.Grid2.insertContentsCol("body", 0);	
	this.Grid2.setCellProperty("body", 0, "text", "bind:COL_CHK");
    
};

// Exe 2-2
this.btn_Exe2_2_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.Grid2.setCellProperty("body", 0, "displaytype", "checkboxcontrol");
	this.Grid2.setCellProperty("body", 0, "edittype"   , "checkbox");
	
	this.Grid2.setCellProperty("head", 0, "displaytype", "checkboxcontrol");
	this.Grid2.setCellProperty("head", 0, "edittype"   , "checkbox");
};

// Exe 2 Check All
this.Grid2_onheadclick = function(obj:nexacro.Grid,e:nexacro.GridClickEventInfo)
{
	if(e.cell == 0){
		var nValue = this.Grid2.getCellText(-1,0); // -1 head
		nValue = nValue == "1" ? "0" : "1";
		this.Dataset2.set_enableevent(false);
		for(var i=0; i< this.Dataset2.rowcoutn; i++){
			this.Dataset2.setColumn(i,"COL_CHK",nValue);
		}
		this.Dataset2.set_enableevent(true);
		//Head
		this.Grid2.setCellProperty("Head",0,"text",nValue);
    }
	
};

// Exe 2 Check One
this.Dataset2_oncolumnchanged = function(obj:nexacro.NormalDataset,e:nexacro.DSColChangeEventInfo)
{
	if(e.columnid == "COL_CHK"){

    }
};

// Exercise 3 ================================================================
// Exe 3-1
this.btn_Exe3_1_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.Grid3.set_cellmovingtype("col");
	this.Grid3.set_cellsizingtype("col");
};

// Exe 3-2
this.btn_Exe3_2_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	//Column Fix
	this.Grid3.setFormatColProperty(2, "band", "left");

	//Row Fix
	this.Grid3.setFixedRow(2);
};
 
// Exe 3-3
this.btn_Exe3_3_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	for(var i=0; i<this.Grid3.getFormatColCount(); i++){
		this.Grid3.setFormatColProperty(i, "band", "body");
	}
	
	this.Grid3.setFixedRow(-1);	
};

// Exe 3-4
this.btn_Exe3_4_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.Grid3.setFormatColProperty(2, "size", 100);
	this.Grid3.setFormatColProperty(5, "size", 0);
};

// Exe 3-5
this.btn_Exe3_5_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.Grid3.setFormatColProperty(5, "size", 80);
};

// Exe 3 Hide
this.Grid3.arrHide = [];
this.Grid3_oncelldblclick = function(obj:nexacro.Grid,e:nexacro.GridClickEventInfo)
{
    // getRealColSize()
};

// Exe 3 Hide Cancel
this.btn_Cancel_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{

};

// Exe 3-6
this.btn_Exe3_6_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	var sCurFormat = this.Grid3.getCurFormatString(); // 레이아웃 바뀐것
	this.Grid3_1.set_formats("<Formats>" + sCurFormat + "</Formats>");
	
 	var sOrgFormat = this.Grid3.getCurFormatString(true); // 원본 레이아웃
	this.Grid3_2.set_formats("<Formats>" + sOrgFormat + "</Formats>");
};

// Exercise 4 ================================================================
// Exe 4-2
this.Grid4_oncellclick = function(obj:nexacro.Grid,e:nexacro.GridClickEventInfo)
{
	var nGridRow = this.Grid4.getTreeRow(e.row);	
	var nStatus  = this.Grid4.getTreeStatus(nGridRow);
	trace("e.row=" + e.row + " : TreeRow=" + nGridRow + " : Status=" + nStatus);

	if(nStatus == 3) return;
	nStatus = (nStatus == 0 ? 1 : 0);

	this.Grid4.setTreeStatus(nGridRow, nStatus);

};

// Exercise 5 ================================================================
// Exe 5-1
this.btn_Exe5_1_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.Dataset5.set_keystring("G:-CORP,+DEPT");
	var sExpr = "expr:(dataset.getRowLevel(currow) == 2 ? CORP+' Sum' : CORP)";
	this.Grid5.setCellProperty("body", 0, "text", sExpr);
	sExpr = "expr:(dataset.getRowLevel(currow) == 0 ? DEPT : (dataset.getRowLevel(currow) == 1 ? DEPT + ' Sum' : ''))";
	this.Grid5.setCellProperty("body", 1, "text", sExpr);
};

// Exe 5-2
this.btn_Exe5_2_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.Grid5.appendContentsRow("summary");
	this.Grid5.setCellProperty("summary", 4, "text", this.Dataset5.getSum("SALARY"));
};

// Exe 5-3
this.btn_Exe5_3_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.Dataset5.set_reversesubsum(true);
	this.Grid5.set_summarytype("top");
};

this.fn_level = function(pRow)
{
	var nMaxLevel = 2;
	var nLevel = nMaxLevel-pRow;
	return nLevel;
}



this.CONST_NONE_MARK = "";
this.CONST_ASC_MARK = "↑";
this.CONST_DESC_MARK = "↓";
this.nPrevCell = -1;
this.fn_sort = function (obj:Grid, e:GridClickEventInfo)
{
    if(obj.getCellProperty("head", e.cell, "displaytype") == "checkboxcontrol") return;
	var objDs     = obj.getBindDataset();
	var sColId    = obj.getCellProperty("body", e.cell, "text").split(":");
	var sHeadText = obj.getCellText(-1, e.cell);

	if(sHeadText.substr(sHeadText.length-1) == this.CONST_ASC_MARK){
		obj.setCellProperty("head", e.cell, "text", sHeadText.substr(0, sHeadText.length - 1) + this.CONST_DESC_MARK);
		objDs.set_keystring("S:-" + sColId[1]);	
	}
	else if(sHeadText.substr(sHeadText.length-1) == this.CONST_DESC_MARK){
		obj.setCellProperty("head", e.cell, "text", sHeadText.substr(0, sHeadText.length - 1) + this.CONST_ASC_MARK);
		objDs.set_keystring("S:+" + sColId[1]);
	}
	else{
		obj.setCellProperty("head", e.cell, "text", sHeadText + this.CONST_ASC_MARK);
		objDs.set_keystring("S:+" + sColId[1]);
	}
	
	if(this.nPrevCell > -1 && this.nPrevCell != e.cell){
		var sPrevText = obj.getCellText(-1, this.nPrevCell);
		obj.setCellProperty("head", this.nPrevCell, "text", sPrevText.substr(0, sPrevText.length - 1));
	}

	this.nPrevCell = e.cell;
}

// * 기타 Grid2에서 예제 시연
// autoenter 속성이 select 인 경우 한번에 그리드에서 콤보와 캘린더를 표현하는 방법
// 
//this.Grid2_oncellclick = function(obj:nexacro.Grid,e:nexacro.GridClickEventInfo)
//{
//	if(e.col == 2){
//		this.Grid2.dropdownCombo();
//	}else if(e.col == 3){
//		this.Grid2.dropdownCalendar();
//	}
//};
// 
// autofittype - 전체 Column이 표시되도록 Column의 너비를 자동조절할지 설정하는 속성입니다.
// grid format 변경 - Grid2 안에 formatid 를 복사하여 생성 할 수 있습니다.
// selecttype - Grid 에서 선택되는 단위를 설정하는 속성입니다.
// autosizingtype - Grid 에 데이터가 모두 표시되도록 Row, Column 의 크기를 자동조절 할 지 설정하는 속성입니다. 
// fastvscrolltype = "centerdisplay" - 속성 변경 후 실행화면의 그리드 스크롤 속도 확인
// 
// this.Grid00.updateToDataset(); // 편집중인 값을 Dataset에 즉시 반영
// 
// this.Grid2_oninput = function(obj:nexacro.Grid,e:nexacro.InputEventInfo)
// {
// 	obj.updateToDataset();
// };




// Exe 6-1
this.btn_Exe6_1_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.Grid6.set_autofittype("col");	
};

this.Radio06_onitemchanged = function(obj:nexacro.Radio,e:nexacro.ItemChangeEventInfo)
{
	this.Grid6.set_selecttype(this.Radio06.value);
};

this.Button00_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.Dataset6.set_enableevent(false);
	for(var i=1;i<10000;i++)  
	{
		var toRow = this.Dataset6.addRow();
		this.Dataset6.copyRow(toRow,this.Dataset6, 0);
		this.Dataset6.setColumn(toRow,"FULL_NAME",this.Dataset6.getColumn(0,"FULL_NAME") + i);
	}
	this.Dataset6.set_enableevent(true);
};

this.btn_Exe6_3_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.Grid6.set_fastvscrolltype("centerdisplay");
};


this.btn_Exe6_4_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.editInput.addEventHandler("oninput", this.fn_oninput, this);	
};   

this.fn_oninput = function(obj:nexacro.Edit,e:nexacro.InputEventInfo)
{
	obj.updateToDataset();
};



this.btn_Exe7_1_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.Grid7.set_autoenter("select");
	/*
	none 	: Cell 의 선택으로 편집모드용 컨트롤이 자동으로 활성화 되지 않습니다.
	select 	: 편집모드용 컨트롤이 자동으로 활성화 
	key 	:  Cell 의 선택으로 편집모드용 컨트롤이 자동으로 활성화 되지 않습니다.
	*/
};


this.Grid7_oncellclick = function(obj:nexacro.Grid,e:nexacro.GridClickEventInfo)
{
	if(e.col == 2)
	{
		this.Grid7.dropdownCombo();
	} else if(e.col == 3)
	{
		this.Grid7.dropdownCalendar();
	}	
};

this.btn_Exe7_2_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.Grid7.set_formatid("default_00");
};

this.btn_Exe7_3_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.Grid7.set_formatid("default");
};

11.

정답파일 EXE2

서비스 세팅후 저장하면 열림