Translate

2019년 6월 10일 월요일

[jqGrid] reloadGrid 메소드 설명







환경: jqGrid v4.7.1 이하 (무료버전)



개별적으로 사용도 가능하며, jqGrid 내부에서 빈번하게 사용이 이루어지는 reloadGrid 메소드에 대해서 알아본다.
1004lucifer
https://github.com/tonytomov/jqGrid/blob/v4.7.1/js/jquery.jqGrid.js#L2821


}).bind('reloadGrid', function (e, opts) {
  if (ts.p.treeGrid === true) { ts.p.datatype = ts.p.treedatatype; }

  // opts.current 값이 true인경우 selectionPreserver 함수를 호출한다.
  // selectionPreserver 함수는 multiselect 모드인경우 자동으로 호출된다.
  // http://www.trirand.com/blog/?page_id=393/help/true-scrolling-not-working-and-need-to-keep-selected#p18068
  if (opts && opts.current) {
    ts.grid.selectionPreserver(ts);
  }
  // datatype:'local' 이면 모든 row를 선택해제한다.
  if (ts.p.datatype === "local") { $(ts).jqGrid("resetSelection");

  // 데이터가 있다면 normalizeData, refreshIndex 함수를 호출한다.
  // normalizeData - 데이터정상화
  // refreshIndex - row의 index(기본값:id) 초기화
  if (ts.p.data.length) { normalizeData(); refreshIndex(); } }
  // 데이터가 없고 treeGrid가 아니라면 데이터를 초기화 한다.
  else if (!ts.p.treeGrid) {
    ts.p.selrow = null;
    if (ts.p.multiselect) { ts.p.selarrrow = []; setHeadCheckBox(false); }
    ts.p.savedRow = [];
  }

  // 동적 스크롤 그리드 사용 시 데이터(row) 초기화
  if (ts.p.scroll) { emptyRows.call(ts, true, false); }

  // opts.page 값이 있는경우
  // [주의사항]
  // page의 값을 0으로 설정할 수 없으며, reloadGrid 메소드 호출전에
  // setGridParam을 이용해 page 값을 0으로 설정하더라도 이부분에서 page가 1로 변경된다.
  if (opts && opts.page) {
    var page = opts.page;
    if (page > ts.p.lastpage) { page = ts.p.lastpage; }
    if (page < 1) { page = 1; }
    ts.p.page = page;
    if (ts.grid.prevRowHeight) {
      ts.grid.bDiv.scrollTop = (page - 1) * ts.grid.prevRowHeight * ts.p.rowNum;
    } else {
      ts.grid.bDiv.scrollTop = 0;
    }
  }

  // 그리드의 데이터를 셋팅한다.
  // (서버에 요청을 하거나 로컬인경우 해당 페이지의 데이터가 보여지도록 셋팅)
  if (ts.grid.prevRowHeight && ts.p.scroll) {
    delete ts.p.lastpage;
    ts.grid.populateVisible();
  } else {
    ts.grid.populate();
  }

  // inlineNav(네비게이터에서 addRow, editRow, saveRow, restoreRow 버튼)
  // 사용 시 해당 버튼들을 보여준다.
  if (ts.p._inlinenav === true) { $(ts).jqGrid('showAddEditButtons'); }
  return false;
})



공식문서에는 trigger("reloadGrid") 방법으로 사용하라고 기술되어있지만 다음과 같이 사용이 가능하다.

trigger("reloadGrid", { current:true, page:3 })

페이지를 업데이트 할 수 있으나 0값으로는 업데이트 할 수 없다.
전체적인 소스를 보니 jqGrid 에서는 page, lastpage 의 최소값의 기준을 1로 설정되어있다.




댓글 없음 :

댓글 쓰기