넥사크로 데이터셋 RowType 변경하기, 주의사항
데이터셋에 조회된 쿼리 결과를 바로사용하지 않고 setColumn(), addRow()등의 함수를 통해 조회된 데이터를 한 번 더 가공한 뒤, 그리드에 렌더링해야할 때가 있다.
이럴 경우 데이터셋의 RowType은 INSERT 혹은 UPDATE 상태로 변경되는데, 데이터셋의 ①RowType을 임의로 변경하는 방법과 변경사항을 적용하면서도 ②변경내역이 없었던것 처럼 RowType을 유지하는 방법에 대해 알아본다.
Dataset > updatecontrol
updatecontrol이 디폴트 값인 true로 설정된 경우, 데이터셋 변경사항이 있을 경우(삽입/수정/삭제 등) 변경 종류에 따라 RowType이 자동으로 변경된다.
updatecontrol을 false로 변경하면 RowType이 더 이상 변경되지 않으며, 사용자가 직접 RowType을 변경할 수 있게된다. 하지만 사용자가 변경해주지 않을경우 데이터셋에 변화가 있더라도 rowtype이 더 이상 변하지 않기 때문에 updatecontrol을 false로 고정시켜 놓는 것은 권장하지 않는다.
set_updatecontrol(false) → setRowType → set_updatecontrol(true)
Script상에서 setRowType함수를 통해 직접 updatecontrol을 변경할 수 있다. 이 때 set_updatecontrol이 true인 상태에서 setRowType을 호출하면 아무 변화가 없으니 setRowType을 호출하기 전엔 set_updatecontrol(false)를 줘야한다.
setRowType을 통해 RowType변경을 완료한 이후에는 updatecontrol 값을 다시 true로 되돌려준다.
this.Dataset00.setRowType(rowposition, rowType)
this.Dataset00.set_updatecontrol(false);
this.Dataset00.setRowType(0, "I"); //또는 setRowType(0, Dataset.ROWTYPE_INSERT)
this.Dataset00.setRowType(0, "U"); //또는 setRowType(0, Dataset.ROWTYPE_UPDATE)
this.Dataset00.setRowType(0, "D"); //또는 setRowType(0, Dataset.ROWTYPE_DELETE)
this.Dataset00.setRowType(0, "그외의 값들"); //setRowType(0, Dataset.ROWTYPE_NORMAL)
this.Dataset00.set_updatecontrol(true);
try-catch-finally를 이용한 보완
updatecontrol 값이 false처리된 상태일 때 코드에서 exception이 발생할 수 있다. 이렇게 되면 updatecontrol이 true로 변경되지 못하고 프로그램이 수행되기 때문에 로직상 혼돈이 올 수 있다.
finally 부분에서 set_updatecontrol(true) 처리를 해줌으로써 이를 방지할 수 있다.
try {
this.Dataset00.set_updatecontrol(false);
//exception 발생
this.Dataset00.set_updatecontrol(true); //수행 X
} catch (error) {
//예외처리
} finally {
this.Dataset00.set_updatecontrol(true); // exception 시에도 수행
}
applyChange
데이터셋의 모든 행의 RowType을 NORMAL로 변경하고 싶다면 applyChange()를 이용해도 된다. applyChange()함수는 updatecontrol 상태와 무관하게 항상 적용가능하다.
this.Dataset00.applyChange();