반응형
1. Dataset 2가지
Application Information\Application Variables\Datasets : Global Dataset
각각 Form의 Dataset : Local Dataset
2. 구성요소
1) Property
enableevent : Dataset의 이벤트를 멈추고 단순 데이터만 세팅하려고 할 때 사용하는 속성
keystring : Dataset을 Grouping하거나 Sort할 때 사용하는 속성
rowcount : Dataset의 전체 Row건수를 확인
rowposition : Dataset에서 현재 Row위치
useclientlayout : Dataset Latout을 내가 작성한 것과 서버에서 return해주는 Layout을 쓸건지 선택하는 속성 Default : false
...
2) Method
addColumn : Column추가
addRow : 마지막 줄에 Row추가
insertRow : 원하는 위치에 Row추가
deleteRow : 선택한 위치 Row삭제
getColumn : Dataset에 특정 Column의 최종 값 얻기
setColumn : Dataset에 특정 Column의 값 Setting
getOrgColumn : Dataset에 특정 Column의 최초 데이터(수정 전의) 값 얻기
getDeleteColumn : 삭제된 Record의 삭제된 특정 Column값 얻기
filter : 결과 내 검색
findRow : 조건에 맞는 특정 Record 위치 얻기
getAvg : 특정 Column의 평균 얻기
getCaseAvg : Expression을 사용해 Column의 평균 얻기
clearDate : Dataset에 있는 모든 Record를 지우는 메서드
reset : 서버 통신 서비스 없이 최초 조회 상태로 되돌리기
copyData : Dataset 전체 복사
copyRow : Dataset에서 특정 Row만 복사
...
3) Event
onload : 데이터가 로딩 되었을 때 발생
cancolumnchange : 입력한 데이터를 Dataset에 반영하기 전에 발생
oncolumnchanged : 입력한 데이터를 Dataset에 반영한 후에 발생
canrowposchange : Dataset의 Row가 변경되기 전 발생
onrowposchanged : Dataset의 Row가 변경된 후 발생
...
3. Dataset 실습
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++){
// 컬럼 ID 조회
// var sColID = this.Dataset1.getColID(i);
// trace("Col ID=" + sColID);
// 컬럼 정보 조회
var objCol = this.Dataset1.getColumnInfo(i);
trace(objCol.id + " : " + objCol.type + " : " + objCol.size + " : " + objCol.prop);
}
};
2) 컬럼 추가
this.btn_Exe1_2_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
this.Dataset1.addColumn("COL_CHK", "STRING");
};
3) 조건 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");
trace(sVal);
this.txtRtn1.set_value(sVal);
};
4) 조건 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);
};
5) 조건을 이용해 목록 출력
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"));
// }
// }
};
6) 조건에 맞춰 검색 후 연산
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);
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);
};
7) 수식 연산
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);
};
8) 정렬
this.btn_Exe3_3_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
this.Dataset1.set_keystring("S:-HIRE_DATE"); // 내림차순
//this.Dataset1.set_keystring("S:+HIRE_DATE"); // 오름차순
};
9) 필터링
this.btn_Exe3_4_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
this.Dataset1.filter("GENDER == 'M' && MARRIED == '0'");
};
10) 대소문자 관계없이 이름에 e가 들어간 사람 필터링
this.btn_Exe3_Filter_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
// like filter --> String.indexOf()
var sText = "e"; // 'e'는 에러발생 : 인덱스 안에서 ''가 들어가 닫히는 부분이 잘못 닫힘
this.Dataset1.filter("FULL_NAME.toUpperCase().indexOf('" + sText.toUpperCase()+"') >= 0");
// this.Dataset1.filter("String(FULL_NAME).toUpperCase().indexOf('" + nexacro.replaceAll(s.Text,"'","\\'").toUpperCase() + "') >= 0"); // 이렇게 하면 ''에 상관없이 됨
};
11) 원본과 필터된 레코드 개수 비교
this.btn_Exe3_5_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
var nCnt = this.Dataset1.getRowCount();
var nCntNF = this.Dataset1.getRowCountNF(); // NF는 NotFilter를 의미
trace(nCnt + " : " + nCntNF);
this.txtRtn1.set_value(nCnt + " : " + nCntNF);
};
12) 최상위에 새로운 Row추가
this.btn_Exe4_1_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
var nRow = this.Dataset4.insertRow(0);
var nType = this.Dataset4.getRowType(nRow);
// 0 : 존재 안함, 1 : 초기, 2 : 추가, 4 : 수정, 8 : 삭제, 16 : 그룹 정보
trace("Insert Rowtype: " + nType);
this.txtRtn2.set_value("Insert Rowtype: " + nType);
};
13) 특정 컬럼 값 변경
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);
};
14) 변경 전후 데이터 확인
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);
};
15) Row Index에 따른 다중 레코드 삭제
this.btn_Exe4_4_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
var arrRow = [3,4,5];
this.Dataset4.deleteMultiRows(arrRow);
// 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);
};
16) 삭제한 레코드와 데이터 반환
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");
// Stack구조라 가장 뒤쪽 Row가 가장 먼저 지워짐, 예를 들어 1~6에서 3, 4, 5, 6을 지우면 6부터 지워짐
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]);
};
17) 데이터 변경여부 체크
this.btn_Exe4_Check_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
this.fn_checkdata(this.Dataset4);
this.fn_checkdata(this.Dataset6); // 데이터 셋 별로 변경여부 체크 가능
};
this.fn_checkdata = function(objDs){
if(this.Dataset4.getDeletedRowCount() > 0){
//alert("삭제");
return true;
}
for(var i = 0 ; i < this.Dataset4.rowcount ; i++ ){
var nRowType = this.Dataset4.getRowType(i);
if( nRowType == 2 || nRowType == 4 ){
//alert("신규/변경");
return true;
}
}
return false;
}
// onbeforeclose이벤트에 아래를 넣으면 창을 닫기 전, 확인 옵션을 활성화 할수있다.
if(this.fn_checkdata(this.Dataset4)){
return "변경된 데이터가 존재합니다. 닫으시겠습니까?";
}
18) Dataset 복사 // 데이터만 복사(레코드 타입은 1로 변경됨)
this.btn_Exe5_1_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
this.Dataset5.copyData(this.Dataset4);
this.Grid5.createFormat();
};
19) 입력, 수정한 데이터 복사 저장 // 레코드 타입도 복사(유지 됨)
this.btn_Exe5_2_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
this.Dataset5.assign(this.Dataset4);
this.Grid5.createFormat();
};
20) 특정 조건에 맞는 Row만 복사
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);
};
21) 특정 조건에 맞는 Data만 복사
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); // 20)과 차이점
};
22) 변경 전 데이터 와 변경 후 데이터 확인
( 중복처리는 cancolumn에서 해야 반영되지 않고 멈출 수 있음 )
this.Dataset6_cancolumnchange = function(obj:nexacro.NormalDataset,e:nexacro.DSColChangeEventInfo)
{
// 수정시 중복발생 했을 때 처리
var nCnt = obj.findRowExpr("FULL_NAME == '" + e.newvalue + "' && currow != " + e.row);
if(nCnt >= 0){
this.alert("Data Duplication");
return false;
}
trace("cancolumnchange");
};
this.Dataset6_oncolumnchanged = function(obj:nexacro.NormalDataset,e:nexacro.DSColChangeEventInfo)
{
trace("oncolumnchanged");
};
23) 데이터 변경시 이벤트 발생 순서 확인
this.btn_Exe6_3_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
// 0은 row index임
this.Dataset6.setColumn(0, "FULL_NAME", "Modify1");
};
24) 데이터 변경시 이벤트 발생 멈춤
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);
};
반응형
'Frontend > Nexacro' 카테고리의 다른 글
[넥사크로] PopupDiv (0) | 2023.07.07 |
---|---|
[넥사크로] Grid (0) | 2023.07.07 |
[넥사크로] 넥사크로 플랫폼 이용 개발 시 주의사항 (0) | 2023.07.07 |
[넥사크로] 다시 해보기 (0) | 2023.07.07 |
[넥사크로] 메인 화면 구성 (0) | 2023.07.07 |