4

我有一个非常具体的问题:我有一个带有四个选项的小表格。您可以填写或不填写,当您单击“确定”时,我会根据这些选项加载带有数据的 jqGrid。但是由于我不知道我的列是什么样的,所以我让我的 servlet 生成列模型和列名;因此我必须发出 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");

    }
});

/edit:我尝试过以下操作,但这仍然不能解决网格不知道实际总共有多少页的问题(实际上,那时我什至不知道),而且,加载后,它认为它只获取本地数据。可能有 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 行的网格大约需要 700 毫秒,页数为 500 行。

如果您使用 SQL 处理数据,我可以上传一个关于如何在 SQL 存储过程中支持分页的示例,这是非常有用的东西。

于 2012-09-07T19:35:16.020 回答