0

私はjqGridを使用しています。ユーザーが検索を実行し、グリッドが検索基準に従ってレコードを表示する場合、特定の状態を保存する必要があります。ユーザーが検索を実行し、編集ボタンをクリックしてレコードを編集すると、検索基準に従って表示されたレコードの最後に残った状態でグリッドを表示する必要があります。オレグのいくつかの回答を回っただけですが、それでも私のことを機能させることができません。私のjqGridコードは次のとおりです。

$('#grid').jqGrid({
url: GetPath,
datatype: 'json',
mtype: 'POST',
search: true,
postdata: {filters: postfilt, sord: postsord, sidx: postsort },
colNames: // ColumnNamesArray
colModel: //The ColumnModel.
page: postpage,
pager: jQuery('#pager'),
rowNum: 10,
rowList: [10, 20, 30, 40],
viewrecords: true,
sortname: 'DefaultSortColName',
sortorder: 'DESC',
loadonce: true,
gridview: true,
ignoreCase: true,
jsonReader: {
root: 'rows',
page: 'page',
total: 'total',
records: 'records',
repeatitems: false,
userdata: 'userdata',
Id: 'PrimaryKeyId'
},
autowidth: true,
multiselect: false
)};

jqGridsコードが存在する共通のjsファイルが1つあります。jqGrid にデータを入力する必要があるたびに、js ファイルを呼び出す必要があります。その前に、いくつかの JavaScript 変数を設定する必要があります。たとえば、jqgrid の URL を指定する場合などです。変数名postfiltpostsord、およびpostsortに注意してください。. 要件に従ってこれらの変数に値を割り当てるだけです。グリッドが初めてロードされるとき、すべてのデータをグリッドにロードするためにフィルターは空白であり、これらの変数に私が持っている postdata フィルター値を割り当てます。ユーザーが何らかのフィルターを適用しているときに、以前に保存されました。私が直面している問題は、この動的フィルターの種類の機能が、実装した最初のグリッドで正常に機能することです。しかし、実装しようとしている他のグリッドでは機能しません(もちろん、グリッドごとに異なるグリッド検索フィルターが保存されています)。Chrome の F12 でのデバッグ中に、フィルター変数が jqGrids postData フィルターに提供される適切な値を示していることを確認しましたが、必要なときにフィルターではなく毎回すべてのデータを jqGrid にロードします。gridCompleteまたはloadCompleteは、グリッドにロードされた後に postdata フィルターを提供しますが、最初のロードで最後に提供された検索条件を jqGrid に入力することにまだ失敗しています。初めてロードされたときに最後に残った状態でロードするようにjqgridの基準を提供する際に間違っているのはどこですか? どんな助けでも大歓迎です。

編集: jqGrid の保存された postdata 検索フィルターの 1 つは次のとおりです。

{"groupOp":"AND","rules":[{"field":"ClientName","op":"cn","data":"client"}]}
4

1 に答える 1

1

問題の主な理由は、使用するパラメーターが間違っていることです。JavaScript では大文字と小文字が区別されます。postdataパラメータはありません。したがって、jqGrid では無視されます。postData代わりに既存のパラメーターがあります。したがって、フィルターを含めて、リクエストに最初の並べ替えを設定するにurl: GetPathは、次の手順を実行する必要があります。

$('#grid').jqGrid({
    ...
    search: true,
    postData: {filters: postfilt },
    sortname: postsort,
    sortorder: postsord,
    ...
});

同様に、のIdプロパティはjsonReader無視されます。id代わりに使用する必要があります。さらに、jqGrid は、 (ドキュメントjsonReaderを参照) のデフォルト プロパティを、グリッド オプションに含まれる値とマージします。したがって、などのデフォルト プロパティを含める必要はありません。のように見えるはずですroot: 'rows'page: 'page'jsonReader

jsonReader: {
    repeatitems: false,
    id: 'PrimaryKeyId'
}
于 2015-04-21T08:04:02.267 に答える