개발 매뉴얼 / 시작하기워크스페이스 ↗

FEATURE GUIDE

그리드 생성 · 데이터 연결

왼쪽에서 기능을 선택하세요. 실행 예제와 필요한 소스를 같은 화면에서 확인할 수 있습니다.

ZixoGrid(host, options)

그리드 생성 · 데이터 연결 예제

독립 실행 ↗

가로 스크롤 확인을 위해 참조 컬럼 4개(각 360px)를 추가했습니다(상세 하위 그리드는 각720px). 기존 행 데이터를 format으로 표시하는 읽기 전용 보조 컬럼이며 원본 행·서버 저장 데이터에는 필드를 추가하지 않습니다. 100×100 붙여넣기 예제는 기존 100개 컬럼으로 가로 스크롤을 확인합니다.

이 페이지의 속성 · 함수

options.*는 그리드 생성 옵션, column.*은 columns 배열 안의 각 컬럼 설정입니다. 생성 후 변경은 아래 API를 사용합니다. 플러그인 설정은 설치 함수에 전달합니다.

속성 · 타입 · 기본값
이름 / 설정 위치타입기본값동작사용 예
options.columns 조건부 필수값Column[][]표시할 컬럼 정의. field는 서로 달라야 합니다. 컬럼 속성 설명 메뉴를 참조하세요.columns: [{ field: 'name', title: '이름' }]
options.rowsobject[][]생성 시 행 데이터. 생략하고 생성 후 grid.setRows(rows)로 넣어도 됩니다. 내부에서 복사하며 rowKey 중복은 허용하지 않습니다.rows: [{ id: 1, name: '홍길동' }]
options.rowKeystring | (row) => string | number'id'행 식별자. 비어 있지 않은 문자열 또는 유한한 숫자여야 하며 수정·선택·고정에 사용합니다. 문자열로 지정한 키 컬럼은 편집할 수 없습니다.rowKey: 'orderId'
options.heightnumber | stringhost 높이가 있으면 100%, 없으면420height:auto는 상위 컨테이너의 하단 여백/형제 영역을 제외한 공간을 계산하고 확정 높이·max-height·화면 경계로 제한합니다. 조상 자체가 화면보다 크면 페이지 스크롤이 남을 수 있습니다. 좌우 그리드는 독립 계산하며 가로 flex 너비 분배도 유지합니다. 같은 부모의 상하 auto 여러 개는 영역별 높이를 배정하세요. 숫자는 px이며 %, px/vh/dvh 문자열도 지원합니다. %의 직접 기준은 host의 콘텐츠 높이입니다. host400px이면 100%=400px·50%=200px입니다. 일반 block 배치에서 부모만 고정하고 host가 auto이거나 min-height만 있으면 기준이 결정되지 않습니다. flex/grid로 확정 높이를 배정할 수도 있습니다. host에 확정 높이를 주고 % 높이 체인의 상위 높이도 정하세요. 생성 후 options 객체 변경은 자동 적용되지 않습니다.height: '100%'
options.pluginsPlugin[][]필요한 플러그인을 명시적으로 등록합니다. 옵션만 지정해도 플러그인이 자동 설치되지는 않습니다. tree와 grouping은 함께 등록할 수 없습니다.plugins: [editorsPlugin(), columnToolsPlugin()]
column.field 필수값string없음행 데이터의 속성 이름. 다른 컬럼과 중복할 수 없습니다.field: 'name'
column.titlestringfield헤더에 표시할 텍스트.title: '이름'
함수 · 인수 · 반환값
함수 / 인수반환값동작 / 조건사용 예
grid.setRows(rows)undefined행 배열로 전체 교체하고 기준 상태·변경 목록·Undo/Redo를 초기화합니다. ID 누락/중복·계산 실패 시 기존 데이터는 유지합니다. 데이터 조회 응답에는 insertRows 대신 사용하세요. 선택은 새 화면에 유효한 셀만 유지되며 명시적 전체 해제는 clearSelection입니다. 진행 중인 조회 요청을 취소하지 않습니다.grid.setRows(response.rows);
grid.destroy()undefined요청·편집 UI·플러그인·Observer·이벤트를 정리합니다. Vue onBeforeUnmount에서 호출하며 종료 후 인스턴스를 재사용하지 않습니다.onBeforeUnmount(()=>grid.destroy());
grid.refresh()undefined현재 옵션/모델로 컬럼과 view를 재계산하고 렌더링합니다. 서버를 재조회하거나 원래 생성 options 객체의 변경을 자동 동기화하지 않습니다.grid.refresh();
grid.on(eventName, handler)() => voidhandler(detail,grid)를 구독하고 해제 함수를 반환합니다. DOM 리스너 등록 오버로드는 내부 확장용입니다.const stop = grid.on("datachange",detail=>console.log(detail));

사용 방법 · 주의 사항

그리드 전역 headerAlign의 기본값은 center입니다. 이 예제는 전역 값을 명시해 헤더 제목을 가운데 정렬합니다. 개별 컬럼 headerAlign을 지정하면 그 컬럼 값이 우선합니다. rows 생성 옵션을 생략하고 그리드를 만든 뒤 grid.setRows(rows)로 데이터를 넣습니다. 조회한 배열도 같은 함수로 넣을 수 있습니다. 전체 교체 시 변경 상태·Undo/Redo는 초기화됩니다. Vue 3에서는 마운트 후 호출하고 해제 시 destroy합니다.

이 예제의 필수값
  • host 필수값 — 그리드를 붙일 실제 DOM 요소 또는 그 요소를 찾는 선택자입니다.
  • columns[].field 필수값 — 표시할 컬럼마다 고유한 문자열을 지정합니다.
  • 행의 rowKey 값 필수값 — setRows/생성 rows/추가 행에 데이터를 넣을 때 각 행에 고유 키가 필요합니다. 기본 키 이름은 id입니다.

이 예제는 생성 옵션 rows를 생략하고 생성 후 조회 데이터를 연결합니다. 생성 후 grid.setRows(rows)를 호출합니다.

데이터 설정과 행 추가의 차이

생성 옵션 rows는 생략할 수 있습니다. 생성 후 setRows(rows)로 조회 결과를 넣으면 전체 데이터를 교체하고 변경 상태·Undo/Redo를 초기화합니다. 기존 데이터에 신규 행을 추가하려면 insertRows(rows)를 사용합니다. insert(row)와 insert(rows)도 지원합니다. 일괄 추가는 한 번의 Undo로 취소되며 ID 중복·누락/계산 실패 시 모두 거부합니다. 컬럼 parse/validate는 셀 편집 때 적용되므로, 추가할 행 값은 호출 전에 준비하세요.

const grid = new ZixoGrid(host, { columns, rowKey: 'id' });
grid.setRows(rows); // 전체 교체 · 새 기준 데이터
grid.insertRows(newRows); // 기존 행 유지 · 여러 행을 변경 목록에 추가
grid.undo(); // 추가한 여러 행을 한 번에 취소

행 데이터: 최소 100행 · start.data.js · JavaScript와 Vue 3가 같은 데이터를 사용합니다.

실행: JavaScript · examples/features/start.js

이 기능의 소스

HTML은 해당 JavaScript 파일과 함께 사용합니다. 행 데이터 탭의 파일도 함께 사용하세요. Vue 3 탭은 해당 컴포넌트를 실행합니다. 실행 방식 전환 시 예제가 초기화됩니다. Vue 3 실행 ↗ · Vue 원본

<!doctype html>
<html lang="ko">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>그리드 생성 · 데이터 연결</title>
    <link rel="stylesheet" href="../../src/zixo.css" />
    <link rel="stylesheet" href="../demo.css" />
  </head>
  <body>
    <main>
      <h1>그리드 생성 · 데이터 연결</h1>
      <div id="grid"></div>
      <div id="report" class="notes result" aria-live="polite"></div>
    </main>
    <script type="module" src="start.js"></script>
  </body>
</html>