gridLib/jqGrid

jqGrid filter (filter 할 때 multiselect유지)

dddzr 2022. 9. 25. 12:29

그리드를 생성한 후 아래 처럼 filter 옵션을 추가 할 수 있다

$("#gridId").jqGrid("filterToolbar",{
//options
})

 

근데 multiselect 옵션을 사용 중 일때 체크한 것이 유지되지 않는다

그래서 검색전에 체크된 row를 저장하고 검색후에 저장된 row를 체크하게 구현함

    var tempSelectedTarget = [];
    let gridId = "GridID";
    $("#"+gridId).jqGrid('filterToolbar',{
        autosearch: true,
        stringResult: true,
        searchOnEnter: true,
        defaultSearch: "cn",
        beforeSearch: function (){ //체크된 데이터 임시저장
         // var rowId = $("#"+gridId).jqGrid('getGridParam', 'selarrrow'); 체크 안된것도 가져오기 위해 이거 사용 x
            var ids = $("#"+gridId).jqGrid('getDataIDs');
            for (var i = 0; i < ids.length; i++) {
              var data = {};
              data.id = $("#"+gridId).jqGrid("getRowData", ids[i]).ComponentID;
              data.value = $("#"+gridId).jqGrid("getRowData", ids[i]).ComponentName;
              data.type = $("#"+gridId).jqGrid("getRowData", ids[i]).ComponentType;
              if (!$("input:checkbox[id='jqg_" + gridId + "_" + ids[i] + "']").is(":checked")) {
                for (var j = 0; j < tempSelectedTarget.length; j++) {
                  if (tempSelectedTarget[j].id === data.id) {
                    tempSelectedTarget.splice(j, 1);
                    j--;
                  }
                }
              }else{
                var duplicateFlag = false;
                for(var j = 0; j < tempSelectedTarget.length; j++){
                  if(tempSelectedTarget[j].id === data.id){
                    duplicateFlag = true;
                  }
                }
                if(!duplicateFlag){
                  tempSelectedTarget.push(data);
                }
              }
            }

          },
          afterSearch: function (){ //체크해줌
            for(var i = 0; i<tempSelectedTarget.length; i++){
            var gridDatas = $("#"+gridId).jqGrid("getRowData");
            for(var j =0; j<gridDatas.length; j++){
              if(tempSelectedTarget[i].id === gridDatas[j].ComponentID){
                $("#"+gridId).jqGrid('setSelection', j+1, true); //rowid는 1부터
              }
            }
        }},
    });