zoukankan      html  css  js  c++  java
  • 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就是全部匹配的记录

  • 相关阅读:
    IIS7中的几种身份鉴别方式(一)Basic身份验证
    IIS7中的几种身份鉴别方式(二)集成身份验证
    java集合
    SharePoint 2010中welcome page的设置细节
    SharePoint中使用Linq出现未将对象引用到实例化的解决方法
    SharePoint 2010中关于An error was encountered while retrieving the user profile的处理方式记录
    The Need for an Architectural Body of Knowledge
    The Softer Side of the Architect
    Event Receivers 学习小结
    使用SmtpClient发送带图片的邮件的代码实现
  • 原文地址:https://www.cnblogs.com/shizhijie/p/8005680.html
Copyright © 2011-2022 走看看