본문 바로가기
Nexacro

[Nexacro] 데이터셋(Dataset)의 이벤트 처리 순서 & 이벤트 발생 멈추기 & 중복체크

by bjgu97 2021. 11. 18.
반응형

1. 이벤트 처리 순서

데이터셋의 데이터가 수정되면 데이터셋 내부적으로 cancolumnchange -> oncolumnchanged 순서로 이벤트 발생

 

cancolumnchange : 데이터셋의 칼럼 값이 변경될 때 발생하는 이벤트

- false 값 반환하면 oncolumnchanged 이벤트 발생하지 않고 수정된 데이터도 원복

oncolumnchanged : 데이터셋의 칼럼값이 변경된 후 발생하는 이벤트

 

[예제] 

Script
output

 

[예제2]

cancolumnchange에서 false를 리턴하면, 데이터 수정시 데이터가 원복되며, oncolumnchange 이벤트는 발생하지 않는다.

script
output

 

 

2. 데이터 변경 시 이벤트 발생 멈추기

데이터셋은 데이터를 변경할 떄마다 이벤트가 발생하는데 잦은 이벤트 발생은 처리 속도 지연, 화면 깜빡임 등의 증상으로 나타낼 수 있다. 따라서 데이터가 많은 경우에는 변경 전에 이벤트를 껐다가 변경 후 다시 이벤트를 키도록 처리하면 이러한 증상 완화할 수 있다. 

 

enableevent : 데이터셋에서 이벤트를 발생시킬지 여부 설정하는 속성

this.dataset1.set_enableevent(false); // 이벤트 발생 멈추기
/*
데이터 변경 작업 수행
*/
this.dataset1.set_enableevent(true);

 

 

3. 데이터 입력시 중복체크

findRowExpr : 조건표현식을 만족하는 첫 번째 row의 인덱스를 반환

// 데이터셋의 칼럼값이 변경될 때 발생하는 이벤트
this.ds_emp_cancolumnchange = function(obj:nexacro.NormalDataset,e:nexacro.DSColChangeEventInfo)
{
	// FULL_NAME 칼럼 값과 데이터셋에서 새롭게 변경한 값(e.newvalue)을 비교.
    	// 현재 row 인덱스 값과 변경된 row 값(포커스되어있는 row 값)이 다를 때 비교
	var nCnt = obj.findROwExpr("FULL_NAME == '" + e.newvalue + "' && currow != " + e.row); 

	if(nCnt > -1) {
    		this.alert("데이터 중복");
        	return false;
    	}
}

댓글