jqGridの表でフィルタリング(絞り込み)を行う

記事内に広告が含まれています。

jqGridでは表のヘッダー部分に入力エリアを設けて絞り込みを行うことが簡単にできます。

プログラミングとしては作成したjqGridの表に「filterToolbar」メソッドでフィルターを追加するだけです。

jqGridの表でフィルタリング(絞り込み)を行う

jqGridでフィルターを追加するには表を作成後「filterToolbar」メソッドを呼び出します。

<!DOCTYPE html>
<html>
    <head>
        <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
        <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/ui-lightness/jquery-ui.css">
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/free-jqgrid@4.15.4/css/ui.jqgrid.min.css">
        <script src="https://cdn.jsdelivr.net/npm/free-jqgrid@4.15.4/js/i18n/min/grid.gendere-de.js"></script>
        <script src="https://cdn.jsdelivr.net/npm/free-jqgrid@4.15.4/js/jquery.jqgrid.min.js"></script>

        <script>
            $(function() {
                //列の設定
                var col_model= [
                                 { name:"no"  ,    index:"no",      width:70,  align:"right" },
                                 { name:"name",    index:"name",    width:100, align:"left" },
                                 { name:"age",     index:"age",     width:100, align:"right" },
                                 { name:"gender",  index:"gender",  width:100, align:"left" },
                                 { name:"feature", index:"feature", width:200, align:"left" }
                               ];

                //列の表示名
                var header_name = ["No.","名前","年齢","性別","特徴"];
                //表示するデータ
                var datas = [
                    { "no":1,  name:"Aさん", age:20, gender:"男性", feature:"仮名ではない" },
                    { "no":2,  name:"Bさん", age:25, gender:"女性", feature:"ばあさんではない" },
                    { "no":3,  name:"Cさん", age:30, gender:"男性", feature:"特になし" },
                    { "no":4,  name:"Dさん", age:35, gender:"男性", feature:"デェーさんではない" },
                    { "no":5,  name:"Eさん", age:45, gender:"女性", feature:"胃酸ではない" },
                    { "no":6,  name:"Fさん", age:50, gender:"女性", feature:"特になし" },
                    { "no":7,  name:"Gさん", age:55, gender:"男性", feature:"じいさんではない" },
                    { "no":8,  name:"Hさん", age:60, gender:"女性", feature:"エロいわけではない" },
                    { "no":9,  name:"Iさん", age:65, gender:"女性", feature:"愛燦燦とー" },
                    { "no":10, name:"Jさん", age:70, gender:"男性", feature:"川平慈英とは関係ない" },
                    { "no":11, name:"Kさん", age:75, gender:"男性", feature:"計算ではない" },
                    { "no":12, name:"Lさん", age:80, gender:"男性", feature:"特になし" }
                ];

                //テーブルの作成
                $( "#sample1" ).jqGrid({
                                        data:datas                          //表示したいデータ
                                       ,datatype : "local"                  //データの種別(local,json,xml)
                                       ,caption : "表のタイトル"            //表のキャプション
                                       ,colNames : header_name              //列の表示名
                                       ,colModel : col_model                //列ごとの設定
                                       ,rowNum : 5                          //1ページに表示する行数
                                       ,rowList : [1, 5, 10, datas.length]  //変更可能な1ページ当たりの行数
                                       ,height : $( window ).height() * 0.4 //高さ(px指定)
                                       ,width : $( window ).width() * 0.6   //幅(px指定)
                                       ,pager : 'pager1'                    //footerのページャー要素のid
                                       ,shrinkToFit : true                  //画面サイズに依存せず固定の大きさを表示する設定
                                       ,viewrecords: true                   //footerの右下に表示する。
                });

                $( "#sample1" ).filterToolbar({
                    defaultSearch : "eq"     //一致条件を入れる。
                                       //選択肢['eq','ne','lt','le','gt','ge','bw','bn','in','ni','ew','en','cn','nc']
                });
            });
        </script>
    </head>
    <body>
        <table id="sample1"></table>
        <div id="pager1"></div>
    </body>
</html>

実際にフィルターを作成しているのは

$( "#sample1" ).filterToolbar({
    defaultSearch : "eq"     //一致条件を入れる。
    //選択肢['eq','ne','lt','le','gt','ge','bw','bn','in','ni','ew','en','cn','nc']
});

の部分ですね。
一致条件は

選択肢 説明 該当するSQL演算子
eq 次に等しい =
ne 次に等くない <>
lt 次より小さい <
le 次より等しいか小さい <=
gt 次より大きい >
ge 次より等しいか大きい >=
bw 次で始まる LIKE ‘文字列%’
bn 次で始まらない NOT LIKE ‘文字列%’
ew 次で終わる LIKE ‘%文字列’
en 次で終わらない NOT LIKE ‘%文字列’
in 次を含む LIKE ‘%文字列%’
ni 次を含まない NOT LIKE ‘%文字列%’

になります。

まとめ

jqGridでフィルターを実装することは非常に簡単であり、便利なのでぜひ使えるようになりましょう。

以上、jqGridの表でフィルタリング(絞り込み)を行うでした。

タイトルとURLをコピーしました