jqGrid
インライン編集を使用してクライアント側でデータを並べ替える直接的な方法はありますか? 行ヘッダーがクリックされても、行が編集可能な場合、データは並べ替えられません。
3 に答える
これと同じ問題がありました。行が編集モードの場合、並べ替えることができません。私の場合、ユーザー編集の状態は問題ではありませんでした。私のグリッドはclientSideであり、ユーザーがクリックして変更を送信するページに保存ボタンがあります。
私はいくつか掘り下げて、自分に合った解決策を見つけました。他の人に役立つことを願っています。基本的に私がしたことは、列見出しのクリックイベントを並べ替えて、私のものが最初になるようにすることでした。次に、クリック イベントで saveRows を呼び出します。
イベントの並べ替えについて、別のスレッドから取得したコードを次に示します。
$.fn.bindUp = function(name, fn) {
// bind as you normally would
// don't want to miss out on any jQuery magic
this.on(name, fn);
// Thanks to a comment by @Martin, adding support for
// namespaced events too.
this.each(function() {
var handlers = $._data(this, 'events')[name.split('.')[0]];
// take out the handler we just inserted from the end
var handler = handlers.pop();
// move it at the beginning
handlers.splice(0, 0, handler);
});
};
次に、コードに行を保存するためのハンドラーを追加します。
$("th.ui-th-column", $("#pacPaymenReviewGridNEW")[0].grid.hDiv).bindUp('click', function(e) {
var $th = $(e.currentTarget).closest("th");
if ($th.length > 0) {
pacTransferFundMaint.saveRowsById('#pacPaymenReviewGridNEW');
}
});
調査の結果、次のアルゴリズムを見つけました。
- ヘッダー クリック イベントをキャッチします。例: ('th').click(function(){})
saveRow
このイベントが発生したときに使用して、編集モードになっている行データを保存します- クリックされたヘッダーを識別します。
グリッド データをそのヘッダーで昇順または降順で並べ替えます。お気に入り
$('#dataGrid').jqGrid('setGridParam', ({ data: list, sortname: columnHeader, sortorder: 'asc',rowNum: list.length })).trigger('reloadGrid');
選択した行を再び編集可能にします。
editRow
これに使用できます。
注:手順 2 ~ 5 は、手順 1 のイベント (ヘッダー クリック イベント) で実行する必要があります。