본문 바로가기
개발 LOG/넥사크로

넥사크로 데이터셋이란? 그리드 연동 기초 사용법 정리

by 문가릿 2026. 10. 7.
반응형

넥사크로로 화면을 만들다 보면 가장 먼저 마주치는 게 데이터셋(Dataset)입니다. "그리드에 데이터를 보여주려면 데이터셋이 필요하다던데, 정확히 뭔가요?" 하는 질문이 정말 많죠.

저도 처음엔 그리드에 직접 데이터를 넣는 줄 알았습니다. 알고 보니 넥사크로는 모든 데이터를 데이터셋에 담고, 화면은 그걸 빌려 보여주는 구조더라고요.

결론부터 말하면, 넥사크로 데이터셋은 화면에서 쓰는 데이터를 담는 메모리 저장소입니다. 그리드·콤보 같은 컴포넌트와 바인딩해서 보여주고, 서버와 데이터를 주고받을 때도 이 데이터셋을 씁니다. 지금부터 데이터셋의 구조부터 기본 사용법, 그리드 연동까지 정리해 드립니다.

📌 핵심 요약

  • Dataset은 넥사크로 화면의 메모리 데이터 저장소입니다.
  • 컬럼(Columns) 정의 → 행(Rows) 추가로 데이터를 담습니다.
  • addRow / setColumn / getColumn이 가장 기본적인 3종 세트입니다.
  • 그리드의 binddataset에 연결하면 데이터가 바로 표시됩니다.
  • 서버 통신은 transaction()으로 데이터셋 단위로 주고받습니다.
 

1. 데이터셋의 구조: 컬럼과 행

데이터셋을 엑셀 표에 비유하면 이해가 빠릅니다. 컬럼(Columns)이 열 제목, 행(Rows)이 데이터입니다. 화면에 데이터셋 컴포넌트(ds_emp 같은)를 올리고, Dataset 에디터에서 컬럼부터 정의합니다.

코드로도 정의할 수 있습니다.

this.ds_emp.addColumn("empno", "STRING");
this.ds_emp.addColumn("ename", "STRING");
this.ds_emp.addColumn("hiredate", "DATE");

데이터셋의 행에는 행 상태(rowtype)라는 개념이 있습니다. 각 행이 어떤 상태인지 숫자로 표시하는데, 서버에 저장할 때 이 정보를 보고 추가·수정·삭제를 구분합니다.

rowtype 의미
1 조회된 일반 행
2 새로 추가된 행
4 수정된 행
8 삭제된 행
 

2. 기본 사용법: 추가·수정·읽기

데이터셋을 다루는 기본 3종 세트는 addRow, setColumn, getColumn입니다. 이 3개만 알면 절반은 끝난 겁니다.

행 추가하기

var nRow = this.ds_emp.addRow();
this.ds_emp.setColumn(nRow, "ename", "홍길동");

addRow()는 빈 행을 만들고 그 행 번호를 돌려줍니다. 그 번호에 setColumn으로 값을 넣습니다.

값 읽기와 수정

var v = this.ds_emp.getColumn(0, "ename");
this.ds_emp.setColumn(0, "ename", "김철수");

getColumn(행번호, 컬럼명)으로 읽고, setColumn(행번호, 컬럼명, 값)으로 씁니다. 행 번호는 0부터 시작합니다.

행 삭제하기

this.ds_emp.deleteRow(nRow);

삭제된 행은 rowtype 8이 되어 서버에 "이 행을 지워달라"는 정보로 전달됩니다.

✅ setColumn 후 화면에 바로 안 뜨면? 데이터셋의 updatecontrol 속성을 확인하세요. 바인딩된 컴포넌트에 변경을 즉시 반영할지 정하는 속성입니다. 그리드와 바인딩된 데이터셋은 보통 자동으로 반영됩니다.

 

3. 그리드와 연동하기

데이터셋에 데이터를 담았다면, 이제 그리드에 보여줄 차례입니다. 방법은 간단합니다. 그리드의 binddataset 속성에 데이터셋 이름(ds_emp)을 지정하면 됩니다. 그 순간부터 데이터셋의 행이 그리드 행으로 표시됩니다.

값이 바뀔 때마다 뭔가 처리하고 싶다면 oncolumnchanged 이벤트를 씁니다. 유효성 검사나 자동 계산에 활용합니다.

this.ds_emp.addEventHandler("oncolumnchanged", this.ds_emp_oncolumnchanged, this);

서버와 데이터를 주고받을 때는 transaction()을 씁니다. 데이터셋 단위로 보냈다 받습니다.

this.transaction("searchEmp", "svc::selectEmp.do", "", "ds_emp=ds_emp", "", "fn_callback");

네 번째 인자가 핵심입니다. "화면데이터셋=서버데이터셋" 형식으로, 서버에서 받은 데이터를 어떤 화면 데이터셋에 담을지 정합니다. 반대로 화면 데이터를 서버로 보낼 땐 세 번째 인자(inDatasets)에 같은 형식으로 적습니다.

⚠️ 주의: transaction의 데이터셋 매핑 문자열 형식을 정확히 지켜야 합니다. "ds_emp=ds_emp"에서 왼쪽이 화면 데이터셋, 오른쪽이 서버 데이터셋입니다. 순서를 바꾸면 데이터가 엉뚱한 곳에 담기거나 아예 오지 않습니다.

마무리

넥사크로 데이터셋은 "화면의 데이터는 전부 데이터셋에 담는다" 이 한 문장으로 정리됩니다. 컬럼 정의 → 행 추가 → 그리드 바인딩 → transaction 송수신, 이 흐름만 익히면 대부분의 화면을 만들 수 있습니다.

다음에는 transaction 콜백 처리와 저장 로직(추가·수정·삭제 구분 저장)을 다뤄보겠습니다.

 

자주 묻는 질문

Q1. 데이터셋과 그리드는 어떻게 다른가요?

데이터셋은 데이터를 담는 저장소이고, 그리드는 그 데이터를 보여주는 화면 컴포넌트입니다. 그리드의 binddataset 속성에 데이터셋을 지정하면 연결됩니다.

Q2. 서버에서 받은 데이터는 어디에 담기나요?

transaction()의 outDatasets(네 번째 인자)에 지정한 화면 데이터셋에 자동으로 담깁니다. 별도로 옮기는 코드가 필요 없습니다.

Q3. 행 상태(rowtype)는 왜 필요한가요?

저장할 때 어떤 행이 추가·수정·삭제됐는지 구분하기 위해서입니다. 서버는 이 정보를 보고 INSERT·UPDATE·DELETE를 나눠 처리합니다.

Q4. 대량 데이터는 어떻게 처리하나요?

페이징 처리가 기본입니다. 한 번에 수만 건을 데이터셋에 담아 그리드에 바인딩하면 화면이 느려집니다. 서버에서 페이지 단위로 나눠 받는 구조를 권장합니다.

관련 글

넥사크로 그리드 사용법 정리

넥사크로 MaskEdit 사용법 정리

반응형

댓글