1

ここで、現在グリッドにロードされているデータをツールバーでフィルタリングする必要があり(クライアント側のフィルタリング)、サーバーで複数の検索を行う必要があるという状況に苦労しています。側。これは可能でしょうか?これに対する解決策はありますか?これが私のグリッド定義です。

grid_on_facilities.jqGrid({
    url: 'OffOnFacilitiesDataJson',
    datatype: "json",
    colNames: ["id", "Orig Loc-CLLIA", "Term Loc-CLLIZ", "Fac,Equip or Cbl Name",
        "Fac or Cbl Type\/Relay Rack", "Unit/Pair", "SUBD or Cbl BP", "Frame/MDF"],
    colModel: [
        {name: 'id', index: 'id', width: 1, hidden: true, hidedlg: true, key: true,
            searchoptions: {sopt: ['eq', 'ne']}},
        {name: 'orig_loc_cllia', index: 'orig_loc_cllia', width: 350,
            hidedlg: true, editable: true, fixed: true},
        {name: 'term_loc_clliz', index: 'term_loc_clliz', align: "right",
            editable: true, width: 180, fixed: true},
        {name: 'fac_equip_or_cbl_name', index: 'fac_equip_or_cbl_name',
            align: "right", editable: true, width: 100, fixed: true}
    ],
    sortable: true,
    rowNum: 10,
    rowList: [2, 5, 10, 20],
    pager: '#pager_on_facilities',
    gridview: true,
    sortname: 'orig_loc_cllia',
    viewrecords: true,
    sortorder: 'desc',
    caption: 'OffOn facilities',
    autowidth: true,
    editurl: 'OffOnFacilitiesDataJson',
    jsonReader: {
        repeatitems: false,
        root: function (obj) { return obj; },
        page: function (obj) { return 1; },
        total: function (obj) { return 1; },
        records: function (obj) { return obj.length; }
    }
}).jqGrid('navGrid', '#pager',
    {edit: true, add: true, del: true, refresh: true, view: false},
    editSettings, addSettings, delSettings,
    {multipleSearch: true, jqModal: false, //overlay: false,
        onClose: function (/*$form*/) {
            // if we close the search dialog during the datapicker are opened
            // the datepicker will stay opened. To fix this we have to hide
            // the div used by datepicker
            $("div#ui-datepicker-div.ui-datepicker").hide();
        }}, {closeOnEscape: true});
grid_on_facilities.jqGrid('filterToolbar');
4

3 に答える 3

1



これを実現するには、まず、クライアント側の並べ替えとサーバー側のページングでOlegが提供するソリューションを実装する必要があります。

正常に動作していることを確認したら、次のコードを実行します。

filterToolbarを次

grid.jqGrid('filterToolbar',{searchOnEnter:false,beforeClear:function(){return true;}});

のように有効にし、次のようなイベント定義を使用してナビゲーションバーで複数の検索を有効にします。

onSearch:function(){$(this).setGridParam({datatype: 'json'}); return true; } onReset:function(){$(this).setGridParam({datatype: 'json'}); return true; }

onPagingイベントを以下のコードに 置き換えます

onPaging:function(){

/*this code  is to fix the issue when we click on next page with some data in filter tool bar
 * along with this in grid definition( in filterToolbar ) we have to return true in "beforeClear "event 
 * */
var data = $(this).jqGrid("getGridParam", "postData");
data._search = false;
data.filters=null;
data.page=$(this).jqGrid("getGridParam","page");
$(this)[0].clearToolbar();
//Here making _search alone false will not solve problem, we have to make search also false. like in below.
$(this).jqGrid('setGridParam', { search: false, postData:data });
var data = $(this).jqGrid("getGridParam", "postData");


/*this is to fix the issue when we go to last page(say there are only 3 records and page size is 5) and click 
 * on sorting the grid fetches previously loaded data (may be from its buffer) and displays 5 records  
 * where in i am expecting only 3 records to be sorted out.along with this in source code comment the line $t.p.records = 0;$t.p.page=1;$t.p.lastpage=0;
 */ 

$(this).jqGrid("clearGridData");

/* this is to make the grid to fetch data from server on page click*/

$(this).setGridParam({datatype: 'json'}).triggerHandler("reloadGrid");

}

于 2012-11-21T12:18:44.887 に答える
1

私はこれについて少し混乱しています:単一の入力でサーバー側とクライアント側の両方でデータをフィルタリングする特定の必要性はありますか? 正直なところ、優れたソリューションとは、1 つの要求に対して 1 つのアクション チェーンを実行できる設計になっていることを意味します。クライアント側とサーバー側のフィルタリング/検索は、私にとって少し混乱しているようです。

クライアント側のフィルタリングを提供し、「onmouseover」でより多くの結果をロードするボタンのような Google 画像検索を提供することができます。

しかし、物事をシンプルにするために、さらに結果が必要な場合にユーザーにクリックするように求めるボタン/リンクを配置することさえ探すかもし​​れません.

于 2012-11-01T11:34:40.397 に答える
0

stringResult: trueサーバーのサーバー側で高度な検索を実装している場合は、オプションを使用してグリッド フィルタリング ( filterToolbar) がサーバーに対して互換性のある要求を生成するようにすることができるため、なぜこのような動作が必要なのかわかりません。この場合、サーバーは、フィルター処理されたデータを [高度な検索] ダイアログまたは検索フィルターのどちらで生成するかを単に「認識」しません。

だから私の提案は行を変更することです

grid_on_facilities.jqGrid('filterToolbar');

grid_on_facilities.jqGrid('filterToolbar', {stringResult: true, defaultSearch: 'cn'});

私が含めた最後のオプションdefaultSearch: 'cn'は、実際には必要ありません。私は個人的にこの設定を使用して、デフォルトの「開始」操作ではなく「含む」のように動作するデフォルトの検索操作を作成します。

于 2012-11-01T11:35:20.223 に答える