首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >jqgrid重新加载时保留过滤器

jqgrid重新加载时保留过滤器
EN

Stack Overflow用户
提问于 2013-01-22 20:59:38
回答 2查看 10.3K关注 0票数 3

这个问题已经问了很多,所以请原谅我再问一次。

我有一个从url加载的网格。

我使用loadonce: true

我使用filtertoolbar工具栏:

代码语言:javascript
运行
AI代码解释
复制
$("#status").jqGrid('filterToolbar', { stringResult:true, searchOnEnter:false, autosearch: true, defaultSearch: "cn" });

我有一个下拉搜索列表,我可以从中选择我正在寻找的东西。效果很好。

我有一个导航按钮,我每30秒点击一次就会重新加载一次。效果很好。

代码语言:javascript
运行
AI代码解释
复制
$("#status").jqGrid('navButtonAdd','#statuspager', { caption: '', buttonicon: 'ui-icon-play', onClickButton: function ()
{
stint = setInterval (function() {
      postfilt = $("#status").jqGrid('getGridParam', 'postData').filter;

      $("#status").jqGrid('setGridParam',{
             url: './ar_status.cgi?systemtype=' + systype,
             datatype: "json",
             postData: postfilt,
             search: true,
             loadtext: "Refreshing grid...",
             loadonce: true,
             loadui: "block"
      });
      $("#status").jqGrid().trigger("reloadGrid");
}, 30000);
},
title: 'Start Auto Refresh (every 30 sec.)'
});

使用google chrome,我可以看到指定的过滤器被发布到服务器上:

代码语言:javascript
运行
AI代码解释
复制
systemtype:production
_search:true
nd:1358887757603
rows:1000
page:1
sidx:system
sord:asc
totalrows:700
filters:{"groupOp":"AND","rules":[{"field":"system","op":"eq","data":"ATTDA02"}]}

我可以在重新加载之间更改过滤器,并看到新的,甚至是多个过滤器:

代码语言:javascript
运行
AI代码解释
复制
systemtype:production
_search:true
nd:1358887847592
rows:1000
page:1
sidx:system
sord:asc
totalrows:700
filters:{"groupOp":"AND","rules":[{"field":"system","op":"eq","data":"ATTDA02"},{"field":"dow","op":"cn","data":"MO"}]}

我在初始加载时使用multipleSearch: true。我很确定它会在重新加载时保留下来

在网格上,过滤器工具栏保留了我的过滤条件,包括文本和选择,但当网格重新加载时,过滤器被忽略,整个数据集显示在网格中。

我在SO上尝试了很多例子。我尝试将{current:true}添加到reloadGrid调用中-没有区别。我似乎不能在重新加载时保留和应用过滤器。

我希望重新加载总是从服务器返回完整的数据集(这发生得很好),并允许当前的筛选器设置来控制重新加载后显示的内容。我不想使用postdata来构建新的SQL select语句-服务器端筛选,因为在任何时候,用户都可能想要单击pause按钮,选择一个新的筛选器,然后查看整个数据集中的其他内容,而无需再次重新加载。

代码语言:javascript
运行
AI代码解释
复制
$("#status").jqGrid('navButtonAdd','#statuspager', { caption: '', buttonicon: 'ui-icon-pause', onClickButton: function ()
{
   clearInterval(stint);
},
title: 'End Auto Refresh'
});

正如我在一篇文章中所看到的,如何在不使用cookie的情况下做到这一点?

我可以尝试使用jqGridExport‘’ing postfilt var,然后使用jqGridImport‘’ing它,但希望有一种更直接的方法。我甚至不确定这是否会有帮助,因为我已经通过postData在网格中获得了所需的一切。

顺便说一句,在上面的setGridParam中,我指定的加载文本从未显示过。相反,默认的“正在加载...”将显示。所有其他参数都在起作用。

先谢谢你,迈克

解决方案。从服务器重新加载json后保留过滤器、排序索引和排序顺序的完整loadComplete:

代码语言:javascript
运行
AI代码解释
复制
                    loadComplete: function() {
                            var $this = $(this);
                            postfilt = $this.jqGrid('getGridParam','postData').filters;
                            postsord = $this.jqGrid('getGridParam','postData').sord;
                            postsort = $this.jqGrid('getGridParam','postData').sidx;

                            if ($this.jqGrid("getGridParam", "datatype") === "json") {
                                    setTimeout(function () {
                                            $this.jqGrid("setGridParam", {
                                                    datatype: "local",
                                                    postData: {filters: postfilt, sord: postsord, sidx: postsort},
                                                    search: true
                                            });

                                            $this.trigger("reloadGrid");
                                    }, 50);
                            }
                    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-22 22:03:12

我不确定,但我想你的第一个问题的根源可能是混合了postData.filterspostData,使用了filter属性,而不是过滤器。您可以使用

代码语言:javascript
运行
AI代码解释
复制
postfilt = $("#status").jqGrid('getGridParam', 'postData').filter;

获取filter属性而不是filters。你得到了undefined的值。因此,将postData设置为postfilt没有任何意义。

下一个问题是服务器响应包含未过滤的数据。要在本地强制过滤数据,必须在从服务器加载完成后重新加载网格。您可以在loadComplete中完成此操作。如果需要,您可以在这里设置postData.filter,设置search: true并触发reloadGrid事件。重要的是,只需执行一次,这样就没有递归,并且在这种情况下,您不能将datatype设置回"json"。在使用loadonce: true选项的情况下,datatype将更改为"local",并结束从服务器加载。如果你想在本地应用过滤,你必须使用选项datatype: "local", search: truepostData重新加载网格一次,让filters指定需要应用的过滤器。查看来自the answeranother one的代码,它们做了其他事情,但您需要的代码将非常接近。

票数 2
EN

Stack Overflow用户

发布于 2013-03-22 12:22:08

非常感谢!

我只是在您的解决方案中添加了一点,以同时保留页码:

代码语言:javascript
运行
AI代码解释
复制
                loadComplete: function () {
                var $this = $(this);
                var postfilt = $this.jqGrid('getGridParam', 'postData').filters;
                var postsord = $this.jqGrid('getGridParam', 'postData').sord;
                var postsort = $this.jqGrid('getGridParam', 'postData').sidx;
                var postpage = $this.jqGrid('getGridParam', 'postData').page;

                if ($this.jqGrid("getGridParam", "datatype") === "json") {
                    setTimeout(function () {
                        $this.jqGrid("setGridParam", {
                            datatype: "local",
                            postData: { filters: postfilt, sord: postsord, sidx: postsort },
                            search: true
                        });
                        $this.trigger("reloadGrid", [{ page: postpage}]);
                    }, 25);
                }
            }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14467883

复制
相关文章
MyBatis Plus 常用 API 全套教程,看完没有不懂的
注意:-- 真实开发中往往都会有这四个字段,version(乐观锁)、deleted(逻辑删除)、gmt_create(创建时间)、gmt_modified(修改时间)
芋道源码
2021/01/08
1.1K0
MyBatis Plus 常用 API 全套教程,看完没有不懂的
进阶!MyBatis-Plus(基于 Springboot 演示)
这一篇从一个入门的基本体验介绍,再到对于 CRUD 的一个详细介绍,在介绍过程中将涉及到的一些问题,例如逐渐策略,自动填充,乐观锁等内容说了一下,只选了一些重要的内容,还有一些没提及到,具体可以参考官网,简单的看完,其实会发现,如果遇到单表的 CRUD ,直接用 MP 肯定舒服,如果写多表,还是用 Mybatis 多点,毕竟直接写 SQL 会直观一点,MP 给我的感觉,就是方法封装了很多,还有一些算比较是用的插件,但是可读性会稍微差一点,不过个人有个人的看法哇
BWH_Steven
2020/10/10
6560
Mybatis-plus常用API全套教程,看完没有不懂的
注意:-- 真实开发中往往都会有这四个字段,version(乐观锁)、deleted(逻辑删除)、gmt_create(创建时间)、gmt_modified(修改时间)
业余草
2020/12/29
4600
Mybatis-plus常用API全套教程,看完没有不懂的
注意:-- 真实开发中往往都会有这四个字段,version(乐观锁)、deleted(逻辑删除)、gmt_create(创建时间)、gmt_modified(修改时间)
java进阶架构师
2021/01/20
4200
Mybatis-plus常用API全套教程,看完没有不懂的
Mybatis-plus常用API全套教程,看完没有不懂的
注意:-- 真实开发中往往都会有这四个字段,version(乐观锁)、deleted(逻辑删除)、gmt_create(创建时间)、gmt_modified(修改时间)
Java识堂
2021/09/27
3521
Mybatis-plus常用API全套教程,看完没有不懂的
注意:-- 真实开发中往往都会有这四个字段,version(乐观锁)、deleted(逻辑删除)、gmt_create(创建时间)、gmt_modified(修改时间)整理了一份272页MybatisPDF文档
程序员白楠楠
2021/01/19
7220
SpringBoot中的自动代码生成 - 基于Mybatis-Plus
大家好啊,我是汤圆,今天给大家带来的是《SpringBoot中的自动代码生成 - 基于Mybatis-Plus》,希望对大家有帮助,谢谢
汤圆学Java
2021/04/22
1.1K0
基于docker可使用的api
https://github.com/spotify/docker-client
cn華少
2018/09/11
8100
Envoy 基于 API 的动态配置
当在 Envoy 配置中定义了上游集群后,Envoy 需要知道如何解析集群成员,这就是服务发现。端点发现服务(EDS)是 Envoy 基于 gRPC 或者用来获取集群成员的 REST-JSON API 服务的 xDS 管理服务。在本节我们将学习如何使用 REST-JSOn API 来配置端点的自动发现。
我是阳明
2020/06/30
3.2K1
基于GAN的自动驾驶汽车语义分割
语义分割是计算机视觉中的关键概念之一,语义分割允许计算机通过按类型对图像中的对象进行颜色编码。GAN建立在基于真实内容的基础上复制和生成原始内容的概念上,这使它们适合于在街景图像上进行语义分割的任务,不同部分的分割使在环境中导航的代理能够适当地发挥作用。
小白学视觉
2021/03/30
1K0
基于GAN的自动驾驶汽车语义分割
基于curl 的zabbix API调用
1,认证并取得加密字段 curl -i -X POST -H 'Content-Type: application/json' -d '{"jsonrpc": "2.0","method":"user
小小科
2018/05/04
3.1K0
基于curl 的zabbix API调用
基于TRIZ突破汽车芯片技术瓶颈
随着智能化和自动化的发展,汽车行业对于芯片技术越来越依赖。然而,汽车芯片技术发展遇到了瓶颈,如何突破这一瓶颈,成为了业内热议的话题。
用户9972271
2023/05/18
2800
基于 SpringBoot + Vue3.2 + Element Plus 的后台管理系统
TANSCI 基于 SpringBoot + Vue3.2 + Element Plus 的后台管理系统。
默存
2022/06/24
1.5K0
基于 SpringBoot + Vue3.2 + Element Plus 的后台管理系统
点击加载更多

相似问题

UIButton返回时丢失文本标签

21

xamarin表单中的StackLauout标签文本对齐

12

用标签xamarin表格对文本进行对齐

22

对齐页的标签和文本框

44

Xamarin窗体-打开标签时打开的多页

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文