2 minute read

jqGrid 란 ?

jqGrid는 jQuery를 이용한 Grid Plugin 이다. 버전에 따라 유료/뮤료 여부가 갈리니 주의해서 사용해야 한다. (4.7 이하 무료) 여기선 무료버전의 마지막인 4.7 기준으로 사용해본 코드들을 정리해보려 한다.

그리드 생성

/**
 * 아이디가 list인 dom에 jqgrid 생성
 */
$("#list").jqGrid({
            datatype: "local",
            data : jsonData,
            colNames:['id', 'OSS Name','Nickname','Version','Declared License','Detected License','Copyright',
                'Homepage','Download URL',  'Summary Description', 'Attribution','Comment', 'Status'],
            colModel: [
                { name: 'id', 	index: 'id', width: 75, key:true, hidden: true, editable:false},
                { name: 'ossName', index: 'ossName', width: 200, align: 'left', editable:false},
                { name: 'ossNicknames', index: 'ossNickNames', width: 200, align: 'left', editable:false},
                { name: 'ossVersion', index: 'ossVersion', width: 75, align: 'left', editable:false},
                { name: 'declaredLicenses', index: 'declaredLicenses', width: 300, align: 'left', editable:false},
                { name: 'detectedLicenses', index: 'detectedLicenses', width: 300, align: 'left', editable:false},
                { name: 'ossCopyright', index: 'copyright', width: 200, align: 'left', editable:false},
                { name: 'homepage', index:'homepage', width: 250, align: 'left', editable:false},
                { name: 'downloadLocation', index:'downloadLocation', width: 150, align: 'left', editable:false},
                { name: 'summaryDescription', index:'summaryDescription', width: 150, align: 'left', editable:false},
                { name: 'attribution', index:'attribution', width: 150, align: 'left', editable:false},
                { name: 'comment', index:'comment', width: 150, align: 'left', editable:false},
                { name: 'status', index:'status', width: 150, align: 'left'}
            ],
            viewrecords: true,
            rowNum: ${ct:getConstDef("DISP_PAGENATION_DEFAULT")},
            rowList: [${ct:getConstDef("DISP_PAGENATION_LIST_STR")}],
            autowidth: true,
            gridview: true,
            height: 'auto',
            pager: '#pager',
            autoencode: true,
            editurl:'clientArray',
            recordpos:'right',
            toppager:true,
            loadonce:false,
            cellsubmit : 'clientArray',
            ignoreCase: true,
            multiselect: true,

            /**
             * hooks
             */
            
            /** when page load complete*/
            loadComplete: function(data) {
                
            },
            /** when double click row */
            ondblClickRow: function(rowid,iRow,iCol,e) {

            },
            /** select or not each row */
            onSelectRow: function(id){

            },
            /** select or not all rows */
            onSelectAll: function(aRowids, status) {
                
            },
            /** when move to page */
            onPaging: function() {

            }
});
  • datatype: 그리드를 채우는 데이터 형식 (xml, json, local, javascript, function)
    • local: array 데이터
    • json: jsonString, xml: xmlString
  • data: grid에 로드할 초기 데이터를 지정할수 있다.
  • cellsubmit
    • clientArray: cell 편집후 local에서만 저장
  • multiselect: 여러 행을 선택할수 있는 옵션

jqGrid 함수

여기서는 아이디가 ‘list’ 인 dom에 jqGrid를 생성했다고 가정한다.

현제 페이지에서만 사용할수 있는 함수

$(”#list”).getRowData();

  • 현제 페이지의 전체 아이템들을 가지고 온다.
  • 속성들은 항상 문자열형태로 뽑혀 나온다.
    • null, undefined는 빈문자열
    • 리스트는 “a,b,c” 의 형태의 문자열로 뽑혀나온다.
  • 모든 페이지의 아이템들을 가지고 올수없다.

$(”#list”).getRowData(id);

  • 현제페이지의 id에 대응하는 아이템을 가지고 온다.
  • 속성들은 항상 문자열형태로 뽑혀 나온다.
    • null, undefined는 빈문자열
    • 리스트는 “a,b,c” 의 형태의 문자열로 뽑혀나온다.
  • 다른 페이지의 아이템들을 가지고 올때는 부적절하다.

$('#list').jqGrid('addRowData', id, data)

  • id와 함께 data를 현제페이지에 append 한다.
  • 이때 data에 id속성이 같은 값으로 설정되어있어야 한다.

      // example
      data.id = 2
      $('#list').jqGrid('addRowData', 2, data);
    

$(”#list”).jqGrid("getGridParam", "selarrrow")

  • 현재 페이지에서 선택된 아이템들을 반환한다.
  • multiselect 가 활성화되어 있어야 한다.
  • 다른페이지로 전환시 현제 페이지에서 선택된 아이템들이 초기화된다. 따라서 선택된 데이터를 유지하기 위해서 직접 코딩이 필요할수도 있다.
  • 상용버전이나 최근 오픈소스버전에서 개선된것으로 보여진다.

$("#list").jqGrid("getDataIDs")

  • 현재 페이지의 아이템들의 id값들을 반환한다.

$("#list").jqGrid("setSelection", id)

  • 현제페이지의 id와 일치하는 아이템을 선택한다.
  • multiselect 가 활성화되어 있어야 한다.

$("#list").jqGrid('editRow', id);

  • 아이템을 편집모드로 전환한다. (각 속성을 수정할수 있다.)
  • editable이 true로 설정된 속성들에 한해 수정이 가능하다.

$("#list").jqGrid('saveRow', id);

  • 편집하던 아이템을 저장한다.

전체 페이지 대상으로 적용되는 함수

$('#list').jqGrid('getGridParam')

  • grid의 config(속성들과 설정된 함수)들을 가져올수 있다.
  • $('#list').jqGrid('getGridParam', 'data') 로 모든 아이템들을 가져올수 있다.

$('#list').jqGrid('getLocalRow', id)

  • id에 해당하는 아이템을 가지고 온다.
  • 아이템의 속성들의 datatype을 그대로 유지하고 있다. (null, undefined, 리스트)

$("#list").jqGrid('clearGridData');

  • grid의 데이터를 모두 지운다.

$("#list").jqGrid('reloadGrid');

  • grid를 새로고침한다.
  • $("#list").jqGrid('reloadGrid',[{ page: 1}]) 를 통해 첫번째 페이지로 이동시키는것도 가능하다.

Leave a comment