この質問はたくさんありましたので、もう一度質問することを許してください。
URLからグリッドをロードしました。
loadonceを使用します:true
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.)'
});
グーグルクロームを使用して、サーバーに投稿されているように指定されたフィルターを見ることができます:
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。私はそれがリロード時に保持されるとかなり確信しています
グリッドでは、filtertoolbarはテキストと選択の両方のフィルター基準を保持しますが、グリッドがリロードされると、フィルターは無視され、データセット全体がグリッドに表示されます。
私はここにSOに投稿された多くの例を試しました。[{current:true}]をreloadGrid呼び出しに追加してみました-違いはありません。リロード時にフィルターを保持して適用できないようです。
リロードで常にサーバーから完全なデータセットを返し(これは正常に行われます)、現在のフィルター設定でリロード後に表示される内容を制御できるようにしたいと思います。postdataを使用して新しいSQLselectステートメント(サーバー側のフィルタリング)を作成したくありません。ユーザーはいつでも一時停止ボタンをクリックして新しいフィルターを選択し、データセット全体から別のデータセットを再読み込みせずに表示したい場合があるためです。
$("#status").jqGrid('navButtonAdd','#statuspager', { caption: '', buttonicon: 'ui-icon-pause', onClickButton: function ()
{
clearInterval(stint);
},
title: 'End Auto Refresh'
});
ある投稿で見たように、Cookieを使用せずにこれを行うにはどうすればよいですか?
postfilt varをjqGridExportで使用してから、jqGridImportを使用してみることができましたが、より直接的なアプローチを望んでいました。postDataを介してグリッドに必要なものがすべて揃っているので、これが役立つかどうかさえわかりません。
ちなみに、上記のsetGridParamでは、指定したロードテキストが表示されません。代わりに、デフォルトの「Loading...」が表示されます。他のすべてのパラメーターは機能しています。
よろしくお願いします、マイク
解決。サーバーから[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);
}
}