DataSet 컬럼정보 확인
DataSet의 컬럼정보를 확인하는 방법과, 컬럼 Type를 변경하는 방법에 대한 설명입니다.
DataSet은 getColumnInfo를 통해 name, size, type 정보를 얻을 수 있습니다.
DataSet 정보확인
this.Button00_onclick = function (obj:Button, e:ClickEventInfo) { var strText = new String(); for (var i = 0; i < this.Dataset00.getColCount(); i++) { var objColInfo = this.Dataset00.getColumnInfo(i); strText += "ID = " + objColInfo.name; strText += " SIZE = " + objColInfo.size; strText += " type = " + objColInfo.type; strText += "\n"; } this.TextArea00.set_value(strText); }
DataSet 컬럼정보 변경
this.Button01_onclick = function (obj:Button, e:ClickEventInfo) { var objColInfo = this.Dataset00.getColumnInfo(2); objColInfo.set_type("INT"); }
스크립트를 통한 컬럼정보 변경은 권장하지 않습니다.
넥사크로플랫폼(nexacro platform)의 경우 서비스를 이용하여 DataSet을 구성하는 것을 권장합니다.
변경된 컬럼정보 확인
this.Button02_onclick = function (obj:Button, e:ClickEventInfo) { var strText = new String(); for (var i = 0; i < this.Dataset00.getColCount(); i++) { var objColInfo = this.Dataset00.getColumnInfo(i); strText += "ID = " + objColInfo.name; strText += " SIZE = " + objColInfo.size; strText += " type = " + objColInfo.type; strText += "\n"; } this.TextArea00.set_value(this.TextArea00.value + strText); }
스크립트를 통한 DataSet 컬럼Type을 변경할 수 있나요?
- 소스 위치
Sample\DataSet\np_Dataset_ColumnInfo.xfdl
Summary
DataSet 컬럼 Type별 Summary를 구현하는 방법에 대해 기술합니다.
Expr 구현방법
Int형과, Float형은 별도의 형 변환을 하지 않고 바로 getSum을 사용할 수 있습니다.
STRING형의 경우에는 Int, Float형으로 형 변환 후 getSum을 통해 값을 표현해야 정상적인 값 표현이 가능합니다.
참고사항
그리드 속성 중 summarytype을 변경하여 SummaryBand위치를 상단으로 표현이 가능합니다.
default : SummaryBand는 하단에, RightBand는 우측에 표시됩니다.
top : SummaryBand는 상단에, RightBand는 우측에 표시됩니다.
- 소스 위치
Sample\DataSet\np_Dataset_getSum.xfdl
Filter
filter를 이용한 like 검색기능 구현
employ 입력 값을 이용하여 %Like%, Like%, = 형태의 검색기능을 구현할 수 있습니다.
관련 메소드
- filter
Dataset에서 조건식을 만족하는 레코드만 보이게 하는 메소드
%Like% 구현
employ 입력 값에 앞뒤 %로 검색을 하고자 하는 경우 구현방법입니다.
this.Button02_onclick = function (obj:Button, e:ClickEventInfo) { this.ds_data.filter("String(employee).indexOf('" + this.ed_name.value.replace("'","\\'") + "') >= 0"); }
Like% 구현
employ 입력 값의 뒤%로 검색을 하고자 하는 경우 구현방법입니다.
this.Button00_onclick = function (obj:Button, e:ClickEventInfo) { this.ds_data.filter("String(employ).substr(0," + this.ed_name.value.length + ").indexOf('" + this.ed_name.value.replace("'","\\'") + "') >= 0"); }
= 구현
employ 입력 값과 동일한 경우에만 검색을 하고자 하는 경우 구현방법입니다.
this.btn_search_onclick = function (obj:Button, e:ClickEventInfo) { this.ds_data.filter("employ=='" + this.ed_name.value.replace("'","\\'") + "'"); }
Like 검색을 구현하는 방법을 알고 싶습니다.
Dataset, filter, like
조건 Filed this.ed_department.value.replace("'","\\'")를 한 부분은 실 데이터에 싱글쿼터(')가 포함되어 있는 값을 처리하기 위해 필요합니다.
- 소스 위치
Sample\DataSet\Dataset_Filter.xfdl
Filter를 이용한 중복데이타 제거
조회된 데이타값 중 조건에 해당하는 중복 Row를 제거하는 방법에 대해 기술합니다.
주요 소스 내용
기본 Filter 내용
this.Button02_onclick = function(obj:Button, e:nexacro.ClickEventInfo) { var sExpr = "rowidx==dataset.findRowExpr(\"code=='\" + code + \"'\")"; this.Dataset00.filter(sExpr); }
rowidx는 Dataset의 row index를 의미합니다.
사용자 함수를 만들어 여러컬럼에 대한 Filter 설정
this.Button00_onclick = function(obj:Button, e:nexacro.ClickEventInfo) { this.gf_distincDsFilter(this.Dataset00, "code,name"); }
this.gf_distincDsFilter = function(objDs, sColID) { var arrArgs = this.gf_Trim(sColID).split(","); var sFilterExpr = ""; var sFindRowExpr = ""; for (var i=0; i<arrArgs.length; i++) { if (objDs.getColumnInfo(arrArgs[i]) == null) continue; sFindRowExpr += (this.gf_IsNull(sFindRowExpr) == false) ? " && " : ""; sFindRowExpr += "" + arrArgs[i] + "=='\" + " + arrArgs[i] + " + \"'"; } if (this.gf_IsNull(sFindRowExpr) == false) { sFilterExpr = "rowidx==dataset.findRowExpr(\"" + sFindRowExpr + "\")"; } objDs.filter(sFilterExpr); }
- 소스 위치
Sample\DataSet\np_Dataset_Distinct_Filter.xfdl
findRowExpr를 이용한 다중 컬럼 검색
Dataset에서 제공되는 findRowExpr메소드를 이용하여 다중 컬럼에 대한 검색을 할 수 있습니다.
주요 소스 내용
this.Button00_onclick = function(obj:Button, e:nexacro.ClickEventInfo) { var nRow = this.ds_data.findRowExpr("department.toString().indexOf('" + this.ed_department.value.replace("'","\\'") + "')>=0&&employee.toString().indexOf('" + this.ed_employee.value.replace("'","\\'") + "')>=0"); if(nRow >= 0) { this.ds_data.set_rowposition(nRow); } else { this.alert("There is no matched conditions."); return; } }
조건 Filed this.ed_department.value.replace("'","\\'")를 한 부분은 실 데이터에 싱글쿼터(')가 포함되어 있는 값을 처리하기 위해 필요합니다.
- 소스 위치
Sample\DataSet\np_Dataset_findRowExp.xfdl
enableevent속성을 이용한 이벤트 제어하기
Dataset에 많은 양의 작업을 하는 경우 이벤트가 발생하여 화면이 깜박이는 현상이 발생할 수 있습니다. 이런 현상을 막기 위해 enableevent 속성을 이용하여 이벤트 발생 여부를 제어할 수 있습니다.
관련 메소드
enableevent
enableevent속성에 따라 DataSet에서 발생하는 이벤트를 중지/실행할 수 있습니다.
onrowposchanged
Dataset 의 rowposition 속성이 변경되면 발생하는 이벤트입니다.
enableevent를 faslse후 반드시 true로 설정을 해 주어야 합니다.
만약 false 후 true를 하지 않는 경우 이벤트가 정상 동작하지 않을 수 있습니다.
주요 소스 내용
/* * File Name : Dataset_Enableevent * Description : 이벤트 발생 여부 제어하기 */ /* 버튼클릭 */ this.btn_execute0_onclick = function(obj:Button, e:nexacro.ClickEventInfo) { this.ds_data.set_enableevent(false); this.ds_data.addRow(); this.ds_data.set_enableevent(true); }
- 소스 위치
Sample\DataSet\np_Dataset_EnableEvent.xfdl
Dataset의 오리지널버퍼 내용 확인하기
Dataset은 각각의 레코드에 해당하는 데이터가 수정, 삭제 시 변경 전 정보를 오리지널버퍼에 기록된다.
getRowType, getOrgColumn 메소드를 이용하여 데이터의 상태와 오리지널버퍼에 기록되어 있는 내용을 확인할 수 있습니다.
관련 메소드
getRowType
Dataset에서 지정된 레코드의 상태를 구하는 메소드
1 : 초기 레코드 상태 2 : 추가된 레코드 상태 4 : 수정된 레코드 상태 8 : 삭제된 레코드 상태
getOrgColumn
Dataset에서 지정한 레코드의 변경 전 칼럼 값을 구하는 메소드
getDeletedRowCount
Dataset에서 삭제된 레코드 수를 구하는 메소드
getDeletedColumn
Dataset에서 삭제된 레코드 중에서 칼럼 값을 구하는 메소드
주요 소스 내용
/* * Function Name : fn_orgDataset * Description : OrginBuffer 기록 내용 확인 * Parameter : * Return : * Example : fn_orgDataset(); */ this.fn_orgDataset = function() { var sOrgCol = ""; var sOrgVal = ""; this.ds_org.clearData(); // 수정된 내용 for (var i = 0; i < this.ds_data.rowcount; i++) { var nRowType = this.ds_data.getRowType(i); if (nRowType == 4) { this.ds_org.addRow(); this.ds_org.setColumn(this.ds_org.rowposition, "COL_TYPE", nRowType); for (var j = 0; j < this.ds_data.colcount; j++) { sOrgCol = this.ds_data.getColID(j); sOrgVal = this.ds_data.getOrgColumn(i, sOrgCol); this.ds_org.setColumn(this.ds_org.rowposition, sOrgCol, sOrgVal); } } } // 삭제된 내용 for (var i = 0; i < this.ds_data.getDeletedRowCount(); i++) { this.ds_org.addRow(); this.ds_org.setColumn(this.ds_org.rowposition, "COL_TYPE", 8); for (var j = 0; j < this.ds_data.colcount; j++) { sOrgCol = this.ds_data.getColID(j); sOrgVal = this.ds_data.getDeletedColumn(i, sOrgCol); this.ds_org.setColumn(this.ds_org.rowposition, sOrgCol, sOrgVal); } } this.grd_output.createFormat(); }
로우타입, 오리지널버퍼 정보를 확인할 수 있나요?
- 소스 위치
Sample\DataSet\np_Dataset_RowType.xfdl
스크립트 이용 GlobalDataSet, LocalDataSet생성하기
new 연산자를 이용하여 전역 영역과 Form에 Dataset을 동적으로 생성이 가능합니다.
주요 소스 내용
this.btn_execute_onclick = function(obj:Button, e:nexacro.ClickEventInfo) { var objGdS = new Dataset; application.addVariable("gds_data", objGdS, "global"); application.gds_data.set_name("gds_data"); application.gds_data.addColumn("COL0","String"); application.gds_data.addColumn("COL1","String"); application.gds_data.addRow(); application.gds_data.setColumn(application.gds_data.rowposition,"COL0","global COL0"); application.gds_data.setColumn(application.gds_data.rowposition,"COL1","global COL1"); this.grd_output0.set_binddataset("gds_data"); this.grd_output0.createFormat(); var objLdS = new Dataset; objLdS.set_name("ds_data"); this.addChild("ds_data", objLdS); this.ds_data.addColumn("COL0","String"); this.ds_data.addColumn("COL1","String"); this.ds_data.addRow(); this.ds_data.setColumn(this.ds_data.rowposition,"COL0","1"); this.ds_data.setColumn(this.ds_data.rowposition,"COL1","first"); this.ds_data.addRow(); this.ds_data.setColumn(this.ds_data.rowposition,"COL0","2"); this.ds_data.setColumn(this.ds_data.rowposition,"COL1","second"); this.grd_output1.set_binddataset("ds_data"); this.grd_output1.createFormat(); this.Edit00.set_value('global dataset count : ' + application.all["gds_data"].rowcount); this.Edit01.set_value('local dataset count : ' + this.all["ds_data"].rowcount); }
참고사항
GlobalDataSet
전역 영역의 Dataset은 어플리케이션 어느 위치에서도 접근해서 사용이 가능하지만 어플리케이션 종료 되기 전까지 메모리에 상주하고 있기 때문에 용도에 따라 위치를 결정해야 합니다.
동적으로 DataSet을 Global에 생성할 수 있나요?
스크립트를 이용하여 DataSet을 생성하는 방법을 알고 싶습니다?
- 소스 위치
Sample\DataSet\np_Dataset_UseScript.xfdl
변경된 컬럼정보를 원본 데이터로 되돌리기
데이터를 조회하여 수정 후 원본(처음 조회된) 값으로 되돌리는 기능을 구현할 수 있습니다.
주요 소스 내용
/* * File Name : Dataset_ChangeRowtype1 * Description : Dataset에서 체크된 레코드를 원본 데이터로 되돌리기 */ /* set rowtype */ this.btn_execute_onclick = function(obj:Button, e:nexacro.ClickEventInfo) { var iRowCount = this.ds_data.getRowCount(); var iColCount = this.ds_data.getColCount(); for (var i = 0; i < iRowCount; i++) { if (this.ds_data.getColumn(i, "COL0") == 1 && this.ds_data.getRowType(i) != "1") { for (var j = 0; j < iColCount; j++) { if (this.ds_data.getColumn(i, j) != this.ds_data.getOrgColumn(i, j)) { this.ds_data.setColumn(i, j, this.ds_data.getOrgColumn(i, j)); } } this.ds_data.setColumn(i, "COL0", 1); this.ds_data.set_updatecontrol(false); this.ds_data.setRowType(i,Dataset.ROWTYPE_NORMAL); this.ds_data.set_updatecontrol(true); } } }
setRowType, updatecontrol, getRowType
- 소스 위치
Sample\DataSet\np_Dataset_ChangeRowtype1.xfdl
변경된 로우타입을 normal로 변경하기
Grid에서 체크로 인해 변경된 로우타입을 normal로 변경할 수 있습니다.
그리드에 체크가 되어 로우타입이 변경되면 데이터 저장시 서버로 해당 레코드가 전송될 수 있는데 이를 막기 위해 사용합니다.
주요 소스 내용
/* * File Name : Dataset_ChangeRowtype2 * Description : Dataset에서 체크로 인해 변경된 로우타입을 normal로 변경하기 */ /* set rowtype */ this.btn_execute_onclick = function(obj:Button, e:nexacro.ClickEventInfo) { 중략... if (bChkFlag == true && nChkCnt == 1) { this.ds_data.setRowType(i, Dataset.ROWTYPE_NORMAL); } } } this.ds_data.set_updatecontrol(true); this.ds_data.set_enableevent(true); }
DataSet에 변경된 RowType을 스크립트를 통해 변경할 수 있습니까?
setRowType, updatecontrol
- 소스 위치
Sample\DataSet\np_Dataset_ChangeRowtype2.xfdl
Datset의 업데이트 여부 판단하기
Dataset의 getRowType 메소드를 이용하여 업데이트 여부를 판단합니다.
관련 메소드
updatecontrol
로우타입을 자동으로 변경할 것인지 여부를 설정하는 속성입니다. updatecontrol 속성이 'false'일 때 setRowType 메소드를 이용해 로우타입을 변경할 수 있습니다.
getDeletedRowCount
Dataset 에서 삭제된 행수를 구하는 메소드이다
getRowType
Dataset의 로우타입를 구한다. 로우타입의 종류는 nexacro studio의 Help(Appendix>Constant>Dataset>Row Type)를 참고
주요 소스 내용
/* * Function Name : fn_isUpdate * Description : 데이터셋의 갱신여부 확인 * Parameter : Dataset * Return : 갱신된 경우 true, 갱신되지 않은 경우 false * Example : fn_isUpdate(ds_data); */ this.fn_isUpdate = function(objDs) { var bRtn = false; // 삭제건수 확인 if (objDs.updatecontrol) { if (objDs.getDeletedRowCount() > 0) { bRtn = true return bRtn; } } var nRowType; for (var i = 0; i < objDs.getRowCount(); i++) { nRowType = objDs.getRowType(i); if (nRowType == 2 || nRowType == 4 || nRowType == 8) { bRtn = true; break; } } return bRtn; }
업데이트, 로우타입, Updatecontrol
- 소스 위치
Sample\DataSet\np_Dataset_CheckUpdated.xfdl