4

非常に具体的な問題があります。4 つのオプションがある小さなフォームがあります。記入してもしなくても構いません。「OK」をクリックすると、これらのオプションに応じて jqGrid にデータが読み込まれます。しかし、自分の列がどのように見えるかわからないので、サーブレットに列モデルと列名を生成させます。したがって、データをロードするためにAJAXリクエストを作成し、それを「ローカル」データとしてjqGridに入力する必要があります。私はページネーションを使用したいと思います。

したがって、私の質問: ローカル データを介して既に確立された後、jqGrid にさらにデータを読み込むにはどうすればよいですか?

コードは次のとおりです。

$.ajax({
    type : 'GET',
    url : 'data.jsp',
    data : reqData,
    dataType : 'json',
    error: function() {
        $("#dialog-message").dialog("open");
        $("#ajax-loader").css("display", "none");
    },
    success : function(result) {
        jQuery("#results").jqGrid({
            data : result.rows,
            datatype : "local",
            colNames : result.columnNames,
            colModel : result.columnModel,
            pager : $('#pager'),
            rowNum : 1000,
            scroll : true,
            viewrecords : true,
            sortname : 'TITEL',
            width : window.innerWidth - 30,
            height : window.innerHeight - 190,
            altRows : true,
            loadError: function() {
                $("#dialog-message").dialog("open");
                $("#ajax-loader").css("display", "none");
            },
            loadComplete: function() {
                $("#ajax-loader").css("display", "none");
            }
        }).jqGrid("navGrid", "#pager", {
            edit: false,
            add: false,
            del: false,
            search: true,
            refresh: false
        }).jqGrid("gridResize");

    }
});

/編集: 次のことを試みましたが、グリッドが実際に合計ページ数がわからないという問題は解決しません (実際には、その時点ではわかりません)。また、ロード後、ローカルデータのみを取得すると考えます。おそらくonScrollイベントか何かがありますか?私はそれを見つけていません。

datatype : !json ? "local" : function(postdata) {
                $.ajax({
                    type: 'GET',
                    url: 'data.jsp',
                    data: $.merge(postdata, reqData),
                    dataType: 'json',
                    success: function(data, status, jqXHR) {
                        var mygrid = jQuery("#results")[0];
                        var myjsongrid = eval("("+jqXHR.responseText+")");
                        mygrid.addJSONData(myjsongrid); 
                    }
                });
            },
4

1 に答える 1

1

このようなことはできませんか... グリッドを取得し、データをクリアし、データを取得する URL を定義し (ユーザーが選択したオプションによって変わる場合があります)、データ形式をローカルではなく json に変更します。

var grid = $('#TargetGridID');
    grid.clearGridData();
    grid.setGridParam({ url: '../controller/action?datatype=Option1' });
    grid.setGridParam({ datatype: 'json' });
    grid.trigger('reloadGrid');

私たちはこの方法論を使用しており、非常にうまく機能しています...これをページング可能なストアド プロシージャで使用すると、グリッドが非常に高速になります! 20,000 行のグリッドでは、500 行のページ数で約 700 ミリ秒かかることがわかっています。

データに SQL を使用している場合は、SQL Stored Proc でページングをサポートする方法のサンプルをアップロードできます。非常に便利なものです。

于 2012-09-07T19:35:16.020 に答える