GridList
이 컨트롤은 무엇인가요?
GridList는 DataTables를 감싸서 만든 "목록 표시용" 그리드 컨트롤입니다. HTML 마크업에서는 <syn_list> 태그와 syn-options 속성을 사용하고, JavaScript 코드에서는 syn.uicontrols.$list.메서드명(...) 형태로 호출합니다. 소스 파일 이름은 GridList.js이지만, 실제 등록되는 모듈 이름은 syn.uicontrols.$list 입니다.
WebGrid($grid, Handsontable 기반)와의 차이가 가장 헷갈리기 쉬운 부분입니다.
- WebGrid (
$grid): 셀 단위로 값을 직접 입력/수정할 수 있는 "편집 가능한 스프레드시트형" 그리드입니다. 엑셀처럼 셀을 클릭해서 값을 고치고, 행 추가/삭제, 셀 유효성 검사 등을 지원합니다. 입력 폼을 대신하는 대량 데이터 편집 화면에 적합합니다. - GridList (
$list): 셀 편집 기능이 없는 "읽기 전용 목록 표시" 그리드입니다. 정렬, 검색(컬럼별 필터), 페이징, 체크박스를 이용한 다중 선택(행 선택) 정도만 지원하며, 값을 바꾸려면setValue로 데이터 전체를 통째로 교체해야 합니다. 목록 조회 화면, 검색 결과 표시, 체크박스로 여러 건을 골라 일괄 처리하는 화면에 적합합니다.
즉, "셀을 직접 고쳐야 하면 WebGrid, 목록만 보여주고 행 단위로 선택/클릭만 하면 되면 GridList"라고 이해하면 됩니다.
언제 사용하나요?
- 검색 조건에 맞는 데이터 목록을 표 형태로 보여줄 때
- 여러 행을 체크박스로 선택해서 일괄 삭제/승인 등 후속 처리를 해야 할 때
- 행을 클릭하거나 더블클릭했을 때 상세 화면으로 이동하거나 팝업을 띄워야 할 때
- 컬럼별 검색, 정렬, 페이징이 필요한 단순 조회성 그리드가 필요할 때
셀 값을 사용자가 직접 입력/수정해야 하는 화면이라면 GridList 대신 WebGrid를 사용하세요.
빠른 시작
- 페이지에
<syn_list>태그를 배치하고id,syn-options(컬럼 정의 포함) 속성을 지정합니다.
<syn_list id="lstDataTable" syn-options="{
checkbox: true,
pageLength: 50,
columns: [
{ title: 'ID', data: 'id', visible: true, width: '30px' },
{ title: 'Name', data: 'name', width: '200px' },
{ title: 'Position', data: 'position', width: '100px' }
]
}" syn-events="['select']" style="width: 100%; border: 1px solid;"></syn_list>
- 페이지 하단에
syn.loader.js스크립트 한 줄만 추가하면, 로더가 필요한 CSS/JS(GridList.js,GridList.css, DataTables 관련 라이브러리 등)를 자동으로 주입하고 컨트롤을 초기화합니다.
<script src="/js/syn.loader.js"></script>
- 값을 읽거나 설정할 때는 페이지 스크립트에서
syn.uicontrols.$list를 사용합니다.
// 전체 행 데이터 조회
var rows = syn.uicontrols.$list.getValue('lstDataTable');
// 데이터 전체 교체(기존 데이터를 지우고 새 배열로 다시 채움)
syn.uicontrols.$list.setValue('lstDataTable', dataArray);
// 체크박스로 선택된 행의 값 조회 (checkbox: true 옵션일 때)
var checked = syn.uicontrols.$list.getControl('lstDataTable').table.column(0).checkboxes.selected().toArray();
예제 실행하기
이 폴더의 example 디렉토리에 초보자용 실행 예제가 있습니다. 웹 서버를 통해 /uicontrols/GridList/example/*.html 경로로 접속해서 바로 확인할 수 있습니다.
basic.html: 체크박스 없이 목록을 표시하고, 컬럼별 검색/정렬/페이징만 사용하는 가장 단순한 예제checkbox.html:checkbox: true옵션으로 여러 행을 체크박스로 다중 선택하는 예제events.html:select/deselect/dblclick이벤트와getValue/setValue/clearAPI를 함께 보여주는 예제
각 예제는 <script src="/js/syn.loader.js"></script> 한 줄만으로 동작하도록 만들어졌습니다.
더 알아보기
- 전체 옵션(Options), 메서드, 이벤트 목록은 같은 폴더의 아래 API 참조 섹션 문서를 참고하세요.
- 실제 소스 코드는
GridList.js,GridList.css파일에서 확인할 수 있 습니다(내부 파일명은 유지되지만 실제 등록 이름은syn.uicontrols.$list입니다). - GridList는 내부적으로 DataTables를 그대로 사용하므로,
getControl(elID).table로 얻은 객체를 통해 DataTables API를 직접 호출할 수도 있습니다. - 체크박스 다중 선택은 DataTables Checkboxes 확장 플러그인을 사용합니다.
실전 예제 페이지
/uicontrols/GridList/example/ 경로의 예제를 아래 iframe에서 바로 확인할 수 있습니다.
basic.html
checkbox.html
events.html
features.html
practical.html
소스와 로드 파일
| 항목 | 내용 |
|---|---|
| 컨트롤 | GridList |
| 전역 별칭 | syn.uicontrols.$list |
| 버전 | v2025.3.1 |
| 소스 | uicontrols/GridList/GridList.js |
| 스타일 | uicontrols/GridList/GridList.css |
API 참조
syn.uicontrols.$list
GridList는 DataTables를 감싸서 만든 읽기 전용 목록 그리드 컨트롤입니다. 소스 파일 이름은 GridList.js이지만, 실제 등록되는 모듈 이름은 syn.uicontrols.$list 입니다. 아래 내용은 1.WebHost/rdy/modules/wwwroot/wwwroot/uicontrols/GridList/GridList.js 소스 코드를 기준으로 정리했습니다.
마크업
<syn_list id="lstDataTable" syn-options="{
checkbox: true,
pageLength: 50,
columns: [
{ title: 'ID', data: 'id', visible: true, width: '30px' },
{ title: 'Name', data: 'name', width: '200px' },
{ title: 'Position', data: 'position', width: '100px' }
]
}" syn-events="['select']" style="width: 100%; border: 1px solid;"></syn_list>
- 태그는 반드시
<syn_list>커스텀 태그여야 하며,id속성이 필수입니다. syn-options속성 값은 JavaScript 객체 리터럴(JSON과 유사한 형태) 문자열이며,defaultSetting을 덮어씁니다.columns배열은 반드시 지정해야 합니다.controlLoad실행 시 원래의<syn_list>엘리먼트는id + '_hidden'으로 이름이 바뀌고 화면에서 숨겨지며, 그 자리에 실제<table>마크업을 담은<div class="list-container">래퍼가 새로 삽입됩니다. 이후 코드에서 원본 엘리먼트를id로 다시 찾으려 하면 찾을 수 없으니 주의하세요(값 조회/조작은 항상syn.uicontrols.$list의 메서드를 통해서 합니다).- 값 변경 등 이벤트를 페이지 스크립트에서 받으려면
syn-events="['select']"처럼 배열 형태의 문자열 속성을 추가합니다(지원되는 이벤트 목록은 아래 참고).
Options (defaultSetting)
| 옵션 | 타입 | 기본값 | 설명 |
|---|---|---|---|
columns | array | (필수, 기본값 없음) | 컬럼 정의 배열. 각 항목은 객체 설정 형태이며, title은 헤더 텍스트로 사용된 뒤 내부적으로 배열에서 제거됩니다(DataTables 컬럼 옵션에는 title을 남기지 않음). |
checkbox | boolean | false | true면 첫 번째 컬럼에 체크박스 선택 컬럼을 추가하고, select를 객체 설정로 강제 설정합니다. 체크박스 모드에서는 sScrollY, fnDrawCallback 옵션이 자동으로 제거됩니다. |
width / height | string | '100%' / '300px' | 그리드를 감싸는 <div class="list-container"> 래퍼의 크기. <syn_list> 태그에 인라인 style.width/height가 있으면 그 값이 우선합니다. |
paging | boolean | true | 페이징 사용 여부. |
pageLength | number | 50 | 페이지당 표시 행 수. |
lengthChange | boolean | false | 페이지당 행 수를 사용자가 바꿀 수 있는 select 표시 여부(기본은 숨김, CSS에서도 .dataTables_length를 감춤). |
ordering | boolean | true | 컬럼 헤더 클릭 정렬 사용 여부. |
order | array | [] | 초기 정렬 기준([[컬럼인덱스, 'asc'|'desc']] 형태). |
info | boolean | true | 하단 "N개 중 N개 표시" 정보 표시 여부. |
searching | boolean | true | 컬럼별 검색창 표시 여부. true면 헤더 행이 복제되어 두 번째 헤더 행에 텍스트 입력창이 생기고, 입력값으로 해당 컬럼을 keyup/change 시 필터링합니다(checkbox: true인 경우 체크박스 컬럼의 검색창은 자동으로 숨김 처리됩니다). |
select | boolean | object | true | 행 선택 사용 여부/방식. checkbox: true이면 내부적으로 객체 설정로 덮어써집니다. |
autoWidth | boolean | true | 컬럼 너비 자동 조정 여부. |
orderCellsTop | boolean | true | 정렬 시 클릭 대상을 복제된(검색창이 있는) 헤더가 아니라 원래 헤더로 고정. |
fixedHeader | boolean | true | 스크롤 시 헤더 고정 여부. |
responsive | boolean | true | 화면 크기에 따라 컬럼을 자동으로 접는 반응형 레이아웃 사용 여부. |
sScrollY | string | '0px' | 세로 스크롤 영역 높이(레거시 DataTables 옵션명). checkbox: true이면 자동 제거됩니다. |
footerCallback | function | (합계 등 커스텀 로직을 넣는 훅, 기본은 빈 처리) | 페이지가 다시 그려질 때마다 호출되는 콜백으로, <tfoot> 영역에 합계 등을 표시하고 싶을 때 오버라이드합니다. |
fnDrawCallback | function | (그리드 높이 재계산 로직) | 그리드가 다시 그려질 때마다 호출되어 스크롤 영역 높이를 부모 패널 크기에 맞춰 재조정합니다. checkbox: true이면 자동 제거됩니다. |
language | object | 한글 메시지 세트(emptyTable, info, search, paginate 등) | DataTables 문구 다국어 설정. |
dataType | string | 'string' | 값의 데이터 타입. |
belongID | string | null | null | 상위 화면/그룹 식별용 부가 정보. |
getter / setter | boolean | false | 값 조회/설정 시 커스텀 훅 사용 여부. |
controlText | string | null | null | 컨트롤에 표시할 고정 텍스트(용도별 커스텀). |
validators | object | null | null | 유효성 검사 규칙. |
transactConfig / triggerConfig | object | null | null | 트랜잭션/트리거 연동 설정. |
bindingID | string | (미지정) | 지정하면 controlLoad 완료 후 syn.uicontrols.$data.bindingSource(elID, bindingID)를 호출해 데이터소스와 자동 연동합니다. |
메서드
| 메서드 | 설명 |
|---|---|
controlLoad(elID, setting) | 컨트롤 초기화. <syn_list> 엘리먼트를 숨기고 실제 <table> 마크업으로 교체한 뒤 DataTables를 적용합니다. 보통 페이지 로더가 자동으로 호출하므로 직접 호출할 일은 거의 없습니다. |
getValue(elID, meta) | 현재 그리드에 표시된 전체 행 데이터를 배열로 반환합니다(table.data().toArray()). |
setValue(elID, value, meta) | 기존 데이터를 모두 지운 뒤(fnClearTable), 넘겨받은 배열(value)로 데이터를 다시 채웁니다(fnAddData). 즉 항상 "전체 교체" 동작입니다. |
clear(elID, isControlLoad) | 그리드의 모든 데이터를 지우고, 컬럼별 검색 조건과 검색창 입력값도 함께 초기화합니다. |
getControl(elID) | 내부 상태 객체(객체 설정)를 반환합니다. table은 DataTables 1.10+ API 객체, list는 레거시(fnXXX) API 객체입니다. 체크박스 선택값은 getControl(elID).table.column(0).checkboxes.selected().toArray()로 조회합니다. |
setCellData(elID, row, col, value) | 특정 셀 값을 프로그램적으로 갱신합니다(사용자 편집 UI는 없지만, 코드에서 특정 셀만 갱신하고 싶을 때 사용). col에 컬럼명을 문자열로 넘기면 내부적으로 propToCol을 통해 인덱스로 변환합니다. |
propToCol(elID, columnName) | columns 설정에서 data 속성 값이 columnName과 일치하는 컬럼의 인덱스를 반환합니다. 찾지 못하면 -1. |
setLocale(elID, translations, control, options) | 다국어(로케일) 텍스트 적용용 훅(현재 구현은 비어 있음). |