jqgrid сохраняет фильтр при перезагрузке
Этот вопрос был так много, поэтому, пожалуйста, прости меня, спрашивая снова.
У меня есть сетка, загруженная с URL.
Я использую loadonce: правда
Я использую filtertoolbar:
$("#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"}]}
Я использую несколько поиска: истина при начальной загрузке. Я уверен, что это сохраняется при перезагрузке
В сетке панель инструментов фильтра сохраняет мои критерии фильтра, как текстовые, так и выделенные, но при перезагрузке сетки фильтры игнорируются, и весь набор данных отображается в сетке.
Я перепробовал много примеров, размещенных здесь на SO. Я попытался добавить [{current: true}] к вызову reloadGrid - без разницы. Я не могу сохранить и применить фильтры для перезагрузки.
Я хотел бы, чтобы перезагрузка всегда возвращала полный набор данных с сервера (что происходит нормально) и позволяла текущим настройкам фильтра контролировать то, что отображается после перезагрузки. Я не хочу использовать postdata для создания нового оператора SQL select - фильтрации на стороне сервера, потому что в любое время пользователь может захотеть нажать кнопку паузы, выбрать новый фильтр и просмотреть что-то еще из всего набора данных без повторной загрузки.
$("#status").jqGrid('navButtonAdd','#statuspager', { caption: '', buttonicon: 'ui-icon-pause', onClickButton: function ()
{
clearInterval(stint);
},
title: 'End Auto Refresh'
});
Как это можно сделать без использования куки, как я видел в одном посте?
Я мог бы попробовать использовать jqGridExport для postfilt var, а затем jqGridImport для него, но надеялся на более прямой подход. Я даже не уверен, что это поможет, так как у меня уже есть все, что мне нужно, прямо здесь, в сетке через postData.
Как примечание, в моем setGridParam выше, текст загрузки, который я указываю, никогда не отображается. Вместо этого по умолчанию отображается «Загрузка ...». Все остальные параметры работают.
Большое спасибо заранее, Майк
Решение. Полный loadComplete для сохранения фильтров, индекса сортировки и порядка сортировки после перезагрузки [json] с сервера:
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);
}
}