JqGrid 獲取所有數據

jqGrid使用本地數據時,當jqGrid配置的rowNum小於本地總數據量(records屬性記錄總數據,可以通過records獲取到本地總數據量),調用getRowData方法獲取到的只是顯示的部分內容,而本地所有數據行。

  如果是通過data或者datastr配置的本地數據,獲取所有數據很簡單,調用$('#gridid').jqGrid('getGridParam','data')/$('#gridid').jqGrid('getGridParam','datastr')就能獲取到原始數據了(datastr還得需要自己處理一下)。

  但是對於啓用了查詢功能,調用getGridParam方法或者getRowData方法就不靈光了,getGridParam獲取的所有數據,而非查詢後匹配的結果集合。而getRowData則獲取到的是rowNum指定大小的數據集,如果查詢結果小於rowNum就沒問題,如果是查詢結果數據量大於rowNum配置,就無法獲取所有查詢匹配的數據行了。

  如果要想獲取到jqGrid本次查詢所有匹配的所有數據,可以有2種方法獲取
1)設置rowNum爲所有查詢後得到的總records數量,然後 在調用getRowData,再還原rowNum爲原來的記錄數量,這個會操作2次jqGrid加載數 據,性能有損耗,但是相比較修改源代碼安全,要是源代碼修改錯了,你就得重新下載過jqGrid了。

     function getResult() {//獲取結果結合的函數,可以通過此函數獲取查詢後匹配的所有數據行。
         var o = jQuery("#jqgrid");
         var rows = o.jqGrid('getRowData'); //獲取當前顯示的記錄
         console.log(rows)
 
         var rowNum = o.jqGrid('getGridParam''rowNum'); //獲取顯示配置記錄數量
         var total = o.jqGrid('getGridParam''records'); //獲取查詢得到的總記錄數量
         o.jqGrid('setGridParam', { rowNum: total }).trigger('reloadGrid'); //設置rowNum爲總記錄數量並且刷新jqGrid,使所有記錄現出來調用getRowData方法才能獲取到所有數據
         var rows = o.jqGrid('getRowData');  //輸出所有匹配的
 
         o.jqGrid('setGridParam', { rowNum: rowNum }).trigger('reloadGrid'); //還原原來顯示的記錄數量
         return rows;
     }

jqGrid獲取本地查詢後匹配的所有數據

2)修改源代碼,jqGrid的過濾結果是內部變量,沒有對外提供,修改jqGrid提供查詢結果的代碼語句,增加一個全局遍歷記錄jqGrid查詢後的結果。

  jqGrid的查詢源代碼如下

var queryResults = query.select(),//此時獲取到的就是所有記錄
            recordsperpage = parseInt(ts.p.rowNum,10),
            total = queryResults.length,
            page = parseInt(ts.p.page,10),
            totalpages = Math.ceil(total / recordsperpage),
            retresult = {};
            queryResults = queryResults.slice( (page-1)*recordsperpage , page*recordsperpage );//這裏對記錄進行了裁剪,獲取當前頁數據

  jqGrid-4.4.0壓縮版本的源代碼如下,如果是其他jqGrid壓縮版本代碼,可能壓縮後的變量名稱會不一樣,自己慢慢找到類似的代碼進行修改

var n=s.select(),u=parseInt(a.p.rowNum,10),t=n.length,v=parseInt(a.p.page,10),x=Math.ceil(t/u),r={},n=n.slice((v-1)*u,v*u),f=s=null;

  修改後的壓縮版本代碼,增加一個函數全局變量來保存全部查詢命中結果

var n=s.select(),u=parseInt(a.p.rowNum,10),t=n.length,v=parseInt(a.p.page,10),x=Math.ceil(t/u),r={};window.hitRcds=n;n=n.slice((v-1)*u,v*u);var f=s=null;


  此時window作用域下的全局變量hitRcds就是全部匹配的記錄

發佈了7 篇原創文章 · 獲贊 9 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章