2011-04-21 17 views
6

この件に関してここにいくつか質問があり、大きな回答がありますが、私の場合は少し違っているようです。私はjqGridに表示されたレコードをフィルタリングする必要がありますが、完全にクライアント側です。jqGridフィルタリングレコード

多くの理由から、私のグリッドに最も適した方法は、ページ上のJavaScriptに直接放出される配列です。グリッド自体は、サーバーとはまったくやりとりしません。さまざまなグリッドイベントでカスタムAJAXが発生していますが、それだけです。 (基本的に、これを大幅に変更できない既存の利用可能なサービスと統合しています)。

私が探しているのは、単純なテキスト入力とボタンに基づいてグリッドをフィルタリングすることです。私のページには、テキスト入力、ボタン、およびテーブルがあります(これは、ドキュメント上のグリッドになります)。ボタンのクリックイベント(通常のjQueryイベントバインディング、何も特別なもの)にバインドし、jqGridの表示フィルタとしてテキスト入力の値を使用したいとします。

"フィルタ"とは、入力内のテキストの(任意のフィールドに)一致するレコードのみを表示することを意味します。次に、すべてのレコードを表示するには、入力を空にしてボタンをもう一度クリックします。さらに、グリッドは複数選択であり、選択はフィルタリングを通じて持続する必要があります。入力にあるものと一致しない行を非表示にする必要があります。

これは可能ですか?

答えて

20

ローカルグリッドをフィルタリングするには、postDataパラメータのjqGridのfiltersプロパティにのみ入力し、さらにsearch:trueを設定する必要があります。

グリッドの選択を保存するには、reloadGridに追加のパラメータ[{page:1,current:true}]hereを参照)を使用できます。

対応するコードは、コードを拡張することができ、私は二つの列「クライアント」(「名前」)と「注意」(「注意」)のためにどのフィルタあなたのためthe demoを作っ次

$("#search").click(function() { 
    var searchFiler = $("#filter").val(), grid = $("#list"), f; 

    if (searchFiler.length === 0) { 
     grid[0].p.search = false; 
     $.extend(grid[0].p.postData,{filters:""}); 
    } 
    f = {groupOp:"OR",rules:[]}; 
    f.rules.push({field:"name",op:"cn",data:searchFiler}); 
    f.rules.push({field:"note",op:"cn",data:searchFiler}); 
    grid[0].p.search = true; 
    $.extend(grid[0].p.postData,{filters:JSON.stringify(f)}); 
    grid.trigger("reloadGrid",[{page:1,current:true}]); 
}); 

することができ必要なすべての列を検索します。

保存行選択で正確に何を意味するかによって、selarrrowの現在の選択を変数に保存し、setSelectionメソッドに関して選択した行を復元する必要があります。

+1

これはすばらしく、ありがとう!カップルの奇妙なことが私のために起こっている。 1:クライアント提供の環境でIE8(私のプロジェクトの唯一のターゲットブラウザ、クライアントの注文)に 'JSON'は定義されていません。しかし、それはあなたのデモで同じブラウザでこれを言うわけではありません。 2:デモでは、フィルタリングの間に行の選択を保存していません。選択された、隠された、次に隠されていない行は選択されなくなりました。しかし、これを実装している間、私はjqGridを使ってもっとシンプルでネイティブに動作するアイデアを得ました... – David

+0

メイングリッドをフィルタリングする代わりに、フィルタ機能がjQuery UIモーダルダイアログをポップアップするフィルタリングされたレコードを表示する自分のグリッド( 'grid2'に' grid1'のフィルタリングされたデータセットを簡単に設定できますか?最悪のケースは、配列としてコピーして、グリッド2)。次に、ユーザーは、自分が望むものを選択し、モーダルダイアログを閉じます。閉じると、選択したIDが 'grid2'(簡単)から取得され、' grid1'で選択されたものに設定されます(簡単、デモはjqGridサイトにあります)。もちろん、 'grid2'をクリアしてください。思考? – David

+1

@David:[json2.js](https://github.com/douglascrockford/JSON-js)が含まれていないため、 "' JSON'は未定義です。 'というエラーが発生しました。 IE8はまた、更新プログラム[976662](http://support.microsoft.com/kb/976662)がインストールされている場合、JSONクラスのネイティブサポートも備えています。'JSON.stringify'が確実に動作するように、必ずjson2.jsをインクルードすることをお勧めします。 – Oleg