gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:20:18 25 4
gpt4 key购买 nike

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

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

我使用loadonce: true

我使用过滤工具栏:

$("#status").jqGrid('filterToolbar', { stringResult:true, searchOnEnter:false, autosearch: true, defaultSearch: "cn" });

我有一个下拉搜索列表,我可以从中选择我要查找的内容。效果很好。

我有一个导航按钮,每 30 秒单击一次即可启动重新加载。效果很好。

$("#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,我可以看到指定的过滤器已发布到服务器:

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"}]}

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

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 。我很确定重新加载时会保留该内容

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

我已经尝试过这里发布的许多示例。我尝试将 [{current:true}] 添加到 reloadGrid 调用中 - 没有区别。我似乎无法在重新加载时保留和应用过滤器。

我希望重新加载始终从服务器返回完整的数据集(这很好),并允许当前的过滤器设置控制重新加载后显示的内容。我不想使用 postdata 构建新的 SQL select 语句 - 服务器端过滤,因为用户可能随时希望单击暂停按钮,选择新的过滤器并查看整个数据集中的其他内容,而无需再次重新加载。

$("#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:

                    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);
}
}

最佳答案

非常感谢!!!!

我只在您的解决方案中添加了一些内容以保留页码:

                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);
}
}

关于jqgrid 在重新加载时保留过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14467883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com