DataSet 컬럼정보 확인
DataSet의 컬럼정보를 확인하는 방법과, 컬럼 Type를 변경하는 방법에 대한 설명입니다.
Dataset_column_information_0
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를 구현하는 방법에 대해 기술합니다.
Dataset_getSum_0
Expr 구현방법
Dataset_getSum_1
Dataset_getSum_3
Int형과, Float형은 별도의 형 변환을 하지 않고 바로 getSum을 사용할 수 있습니다.
Dataset_getSum_2
Dataset_getSum_4
STRING형의 경우에는 Int, Float형으로 형 변환 후 getSum을 통해 값을 표현해야 정상적인 값 표현이 가능합니다.
참고사항
그리드 속성 중 summarytype을 변경하여 SummaryBand위치를 상단으로 표현이 가능합니다.
default : SummaryBand는 하단에, RightBand는 우측에 표시됩니다.
top : SummaryBand는 상단에, RightBand는 우측에 표시됩니다.
- 소스 위치
Sample\DataSet\np_Dataset_getSum.xfdl
Filter
filter를 이용한 like 검색기능 구현
employ 입력 값을 이용하여 %Like%, Like%, = 형태의 검색기능을 구현할 수 있습니다.
findRowExpr
관련 메소드
- 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를 제거하는 방법에 대해 기술합니다.
Dataset_Distinct_filter_0
주요 소스 내용
기본 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메소드를 이용하여 다중 컬럼에 대한 검색을 할 수 있습니다.
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_0
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_RowType_0
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생성하기
Dataset_UseScript_0
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
변경된 컬럼정보를 원본 데이터로 되돌리기
데이터를 조회하여 수정 후 원본(처음 조회된) 값으로 되돌리는 기능을 구현할 수 있습니다.
Dataset_ChangeRowtype_0
주요 소스 내용
/*
* 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로 변경할 수 있습니다.
Dataset_ChangeRowtype_1
그리드에 체크가 되어 로우타입이 변경되면 데이터 저장시 서버로 해당 레코드가 전송될 수 있는데 이를 막기 위해 사용합니다.
주요 소스 내용
/*
* 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 메소드를 이용하여 업데이트 여부를 판단합니다.
Dataset_CheckUpdated_0
관련 메소드
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