这个问题已经很多了,所以请原谅我再问一次。
我有一个从 url 加载的网格。
我使用 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.)'
});
使用谷歌浏览器,我可以看到指定的过滤器被发布到服务器:
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 。我很确定在重新加载时会保留
在网格上,过滤器工具栏保留了我的过滤条件,包括文本和选择,但是当网格重新加载时,过滤器被忽略并且整个数据集都显示在网格中。
我已经尝试过在 SO 上发布的许多示例。我尝试将 [{current:true}] 添加到 reloadGrid 调用 - 没有区别。我似乎无法在重新加载时保留和应用过滤器。
我希望重新加载始终从服务器返回完整的数据集(这很好),并允许当前的过滤器设置控制重新加载后显示的内容。我不想使用 postdata 来构建新的 SQL 选择语句 - 服务器端过滤,因为在任何时候用户可能想要单击暂停按钮,选择一个新的过滤器并从整个数据集中查看其他内容,而无需再次重新加载。
$("#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 中,我指定的 loadtext 永远不会显示。而是显示默认的“正在加载...”。所有其他参数都在工作。
非常感谢,迈克
解决方案。从服务器重新加载 [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);
}
}