JQGrid
이 컨트롤은 무엇인가요?
jqGrid.js는 jQuery jqGrid(트라이랜드 jqGrid 계열) 라이브러리를 감싼 레거시 그리드 컨트롤입니다. syn.uicontrols.$jqgrid 싱글턴 객체로 노출되며, 예전에는 WebGrid 폴더에 함께 있었지만 지금은 JQGrid 폴더로 분리되었습니다.
이 저장소에는 jqGrid/jQuery UI 벤더 파일 자체가 포함되어 있지 않으므로, 별도로 확보해서 배치한 뒤 경로를 맞춰야 합니다.
언제 사용하나요?
- 이미
$jqgrid로 작성된 기존 화면을 수정해야 할 때만 사용하세요. 신규 개발에는 권장하지 않습니다. - 신규 화면에서 CRUD 그리드가 필요하다면 실무 표준인 AUIGrid를 사용하세요.
빠른 시작
syn.loader.js에는 jqgrid(→ syn_jqgrid) 자동주입 케이스가 없습니다. jQuery jqGrid 벤더 라이브러리(이 저장소에는 포함되어 있지 않으므로 별도로 확보해서 /lib/jqgrid/ 등에 배치)와 jqGrid.js/jqGrid.css를 페이지의 pageLoadFiles 훅으로 직접 등록해야 합니다.
<table id="grdLegacy"></table>
<script>
function pageLoadFiles(styleFiles, jsFiles, templateFiles) {
window.afterLoadFiles = [];
afterLoadFiles.push('/lib/jqgrid/css/ui.jqgrid.min.css');
afterLoadFiles.push('/lib/jqgrid/js/jquery.jqgrid.min.js');
afterLoadFiles.push('/uicontrols/JQGrid/jqGrid.css');
afterLoadFiles.push('/uicontrols/JQGrid/jqGrid.js');
}
</script>
<script src="/js/syn.loader.js"></script>
'use strict';
let $samplePage = {
hook: {
pageLoad() {
syn.uicontrols.$jqgrid.controlLoad('grdLegacy', {
colModels: [
{ name: 'ProdID', label: '제품코드', width: 120 },
{ name: 'ProdName', label: '제품명', width: 200 }
]
});
}
}
}
예제 실행하기
example/ 폴더의 HTML 파일을 handstack의 wwwroot 정적 서버(rdy 프로젝트) 경로 아래에 두고 브라우저로 열면 바로 동작을 확인할 수 있습니다.
jqgridbasic.html/.js:$jqgrid기본 사용법 (벤더 스크립트 수동 주입 예시 포함)
각 예제는 화면 하단 로그 영역(syn.$l.eventLog 출력)에서 이벤트 발생 순서와 전달값을 확인할 수 있습니다.
더 알아보기
- API 상세는 같은 폴더의
API.md를 참고하세요. - 실제 소스:
wwwroot/uicontrols/JQGrid/jqGrid.js,jqGrid.css - 로더 자동주입 정의 없음 —
pageLoadFiles훅으로 수동 주입 필요(위 "빠른 시작" 참고) - jqGrid(free-jqgrid 계열) 문서: https://free-jqgrid.github.io/
실전 예제 페이지
/uicontrols/JQGrid/example/ 경로의 예제를 아래 iframe에서 바로 확인할 수 있습니다.
jqgridbasic.html
소스와 로드 파일
| 항목 | 내용 |
|---|---|
| 컨트롤 | JQGrid |
| 전역 별칭 | syn.uicontrols.$jqgrid |
| 소스 | uicontrols/JQGrid/jqGrid.js |
| 스타일 | uicontrols/JQGrid/jqGrid.css |
API 참조
싱글턴 객체: syn.uicontrols.$jqgrid
소스 파일: wwwroot/uicontrols/JQGrid/jqGrid.js, wwwroot/uicontrols/JQGrid/jqGrid.css
내부 라이브러리: jQuery jqGrid(트라이랜드 jqGrid 계열). 이 저장소에는 jqGrid/jQuery UI 벤더 파일 자체가 포함되어 있지 않으므로, 별도로 확보해서 배치한 뒤 경로를 맞춰야 합니다.
syn.loader.js에 자동주입 케이스가 없어 마크업은 <syn_jqgrid> 커스텀 태그가 아니라 일반 <table> 요소에 controlLoad를 직접 호출하는 방식을 사용합니다(예제 참고).
마크업 / 초기화
<table id="grdLegacy"></table>
syn.uicontrols.$jqgrid.controlLoad('grdLegacy', {
caption: '레거시 그리드',
gridWidth: 600,
gridHeight: '300px',
rowNumbers: true,
colModels: [
{ name: 'ProdID', label: '제품코드', width: 120, key: true, edittype: 'text' },
{ name: 'ProdName', label: '제품명', width: 200, edittype: 'text' }
]
});
controlLoad(elID, setting)은 대상 요소를{elID}_hidden으로 바꾸고, 실제<table id="elID">를 새로 만든 뒤 내부적으로jQuery.jqGrid({...})를 호출합니다.- 이벤트 핸들러(
{elID}_onSelectRow등)가window[pageScript].event에 있으면controlLoad시점에 jqGrid의 해당 콜백 옵션에 그대로 연결됩니다(별도syn-events선언 없이, 이름만 맞으면 자동 연결).
Options (gridOptions)
| 속성 | 기본값 | 설명 |
|---|---|---|
caption | null | 그리드 제목 |
autoWidth | true | 컨테이너에 맞춰 너비 자동 조정 |
gridWidth / gridHeight | 250 / '200px' | 그리드 크기 |
multiSelect / multiSelectWidth | false / 20 | 행 다중 선택 체크박스 컬럼 |
dataType | 'json' | jqGrid 데이터 타입(내부적으로 datatype: 'local', editurl: 'clientArray'로 동작하여 클라이언트 메모리 그리드로 사용) |
rowNumbers | true | 행 번호 컬럼 |
sortAble / sortName / sortOrder | true / '' / 'asc' | 정렬 옵션 |
viewRecords | true | 하단 레코드 수 표시 |
frozenColumns | false | 컬럼 고정 |
colModels | 예시 3컬럼 배열 | jqGrid의 colModel에 대응. 각 항목은 name/label/align/key/width/edittype/frozen/hidden/resizable/sortable/sorttype/dataedittype 등을 가짐 |