XPLATFORM 101

- Dataset > Coding Event


데이터셋에서의 이벤트는 서로 연결된 관계를 가지기 때문에 순서와 역할을 정확하게 이해하는게 중요합니다.
제공되는 이벤트는 다음과 같습니다.

cancolumnchange
canrowposchange
oncolumnchanged
onload
onrowposchanged
onrowsetchanged
onvaluechanged

각 역할에 대해 자세하게 살펴보겠습니다.

(1) onload
- 데이터셋을 구성하는 데이터 로딩이 완료된 시점에 발생
- rowposition 의 초기값은 -1인데 데이터가 올라오고 나면 0으로 변경됩니다.
- 데이터가 로딩되는 과정은 여러가지 상태값을 가집니다.


예제에서는 사전에 정의된 데이터셋이 로드되기 때문에 상태값이 Dataset.REASON_LOADCONTENT 이 됩니다.
그러면서 rowposition 이 변경되어 OnRowPosChanged 이벤트가 발생합니다.


(2) onrowposchanged
- 데이터셋의 rowposition이 변경된 후에 발생
- 새로운 위치 정보와 이전 위치 정보를 제공합니다.
- onload 이벤트와 함께 row의 위치가 바뀌었으니 이벤트가 발생했겠죠.


(3) onvaluechanged
- 데이터셋의 표현값이 변경될때 발생하는 이벤트
- 데이터셋의 Row 추가, 삭제, 이동으로 선택된 Row가 변경될 경우 마지막에 이벤트가 발생


(4) onrowsetchanged
- 데이터셋의 레코드가 추가, 삭제, 변경되었을때 발생하는 이벤트


- reason 값에서 이벤트의 발생 원인을 확인할 수 있습니다.


그리고 예제 테스트를 통해 사용자의 행위에 따라 어떤 이벤트가 발생하는지 따라가보고 있습니다.
먼저 setColumn() 메소드가 실행되면
cancolumnchange > oncolumnchanged > onvaluechanged 이벤트가 발생합니다.

앞에서 onvaluechanged 이벤트가 가장 마지막에 발생한다고 했는데 이번에도 마찬가지입니다.

(5) cancolumnchange 
- 데이터셋의 컬럼 값이 변경되기 전에 발생하는 이벤트
- 값이 변경하려는 시도에 대해 값을 변경하기 전에 이벤트를 발생시킵니다.
- 정합성 체크등을 하고 문제가 있다면 false 를 리턴해서 변경을 무효화시킬 수 있습니다.


(6) oncolumnchanged 
- 데이터셋의 컬럼값이 변경된 후에 발생하는 이벤트
- setColumn 메소드 호출시 발생하게 됩니다. cancolumnchange 이벤트와 짝으로 동작하네요.
이벤트는 다르지만 동일하게 DSColChangeEventInfo를 사용하고 담겨진 내용도 다르지 않습니다.


데이터셋의 rowposition 를 바로 변경하게 되면 아래와 같이 이벤트가 발생합니다.
canrowposchange > onrowposchanged > onvaluechanged

(7) canrowposchange 
- 데이터셋의 Row 포지션이 변경되기 전에 발생
- addRow, appendData, filter, deleteRow, clear 과 같이 현재 Row 포지션이 변경되는 경우 이벤트가 발생합니다.
cancolumnchange 와 마찬가지로 false 를 리턴하면 더 이상 이벤트가 진행되지 않습니다.

데이터셋에서 deleteRow() 메소드를 실행하면 아래와 같이 이벤트가 발생합니다.
onrowsetchanged > onrowsetchanged > canrowposchange > onrowposchanged > onvaluechanged

흥미로운 것은 onrowsetchanged 이벤트가 2번 발생한다는 것인데
다른 값은 동일하고 reason이 다르네요.
첫 번째는 40 (데이터셋 Row 상태 변경)이고
두 번째는 20 (데이터셋 Row 삭제)가 처리됩니다.

데이터셋에서 addRow() 메소드를 실행하면 아래와 같이 이벤트가 발생합니다.
onrowsetchanged > canrowposchange > onrowposchanged > onvaluechanged

이때는 onrowsetchanged 이벤트에서 reason 값이 12가 됩니다.
상태 변경 없이 바로 추가로 처리되네요.

* 이전 마이플랫폼에서는 데이터셋에 FireEvent 라는 속성이 있었는데 엑스플랫폼에서는 enableevent가 동일한 기능을 제공합니다. 마지막 예제에서는 enableevent 가 true 가 되면서 onrowsetchanged 이벤트가 발생합니다.

http://cafe.naver.com/xplatform101/192