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就是全部匹配的记录

  • 相关阅读:
    学算法的那些年,吴师兄接触的网站、软件、视频、书籍大揭秘
    阮一峰:CSS Modules 用法教程
    截取url参数
    在dotnet core实现类似crontab的定时任务
    开源一个基于dotnet standard的轻量级的ORM框架-Light.Data
    ABP Vnext使用mysql数据库
    实现ElementUI Dialog宽度响应式变化
    使用Vue Baidu Map对百度地图实现输入框搜索定位
    使用Docker搭建HttpRunnerManager环境
    SpringBoot集成spring aop开发
  • 原文地址:https://www.cnblogs.com/shizhijie/p/8005680.html
Copyright © 2011-2022 走看看