jqGrid远程数据,本地排序

时间:2012-02-02 22:58:53

标签: jqgrid

我有一个网格,我正在检索整个数据集,然后希望用户能够对结果数据进行排序。我使用以下属性,但网格不排序。在用户点击一个按钮之后也值得一提,我将进行AJAX调用然后我需要从源代码刷新,但由于我每次都将所有数据都提取到客户端,所以我不需要去回到服务器只是为了排序。

loadonce: true, // to enable sorting on client side
sortable: true //to enable sorting

非常感谢任何建议!

4 个答案:

答案 0 :(得分:3)

我刚注意到了一些事情。 您可以在定义网格时使用loadComplete参数。

                    loadComplete: function() {
                                    // add a function here that waits for a short amount of time, like 100msecs
                                    jQuery("#list1").jqGrid('setGridParam', {
                                            datatype:'local',
                                            sortname:'name',
                                            sortorder:'asc',
                                            page:1
                                    }).trigger("reloadGrid");
                    }

请注意,我在本地使用我的数据,当我需要刷新时,将数据类型放回xml。

重要提示:这本身不起作用:在触发reloadGrid(执行行)之前,需要等待一小段时间。 否则你不会看到输出的差异。

答案 1 :(得分:2)

我不确定,但在我看来,您希望在本地实现排序,而远程搜索。我有同样的要求,我这样做:Make 'Search' remote and everything else (sorting, pagination, etc) local in jqGrid

答案 2 :(得分:2)

您可能会看到的问题并不是很清楚,但是当使用远程数据源进行本地排序和过滤时,您需要注意以下几点:

  1. 即使您在本地排序,您仍然需要远程排序,以便加载的远程数据与网格的当前排序状态匹配。
  2. 加载网格后无法更改loadonce值,但您可以更改datatype值并强制从服务器重新加载。网格仍然具有您为网格设置的初始url,因此您需要运行的是:

    $(this).jqGrid('setGridParam', {datatype:'json'}).trigger('reloadGrid');
    
  3. 从远程重新加载时甚至在本地排序时,您将失去选择。为了保存这些,您需要添加将保存选择的处理程序,重新加载然后重新设置这些选择。
  4. 您可以在此处找到有关如何执行所有操作的详细信息:http://articles.firstclown.us/post/jqgrid-configuration-for-remote-data-loading-with-local-sorting-and-filtering

答案 3 :(得分:1)

我需要刷新/加载远程数据,而所有其他操作都在本地完成。那么这就是我如何实现我的需要。

使用数据类型local

准备jqGrid
$("#jqGridView").jqGrid({
     //url: originalUrl,// Original line
     //datatype: "json",// Original line
     datatype: "local", // For local sorting
     sortable: true,    // I want local sorting for all columns
     colNames: [...],
     colModel: [...],
     //...
});

然后在(重新)加载/搜索时调用此函数:

function reloadJqGrid() {
    var urlForSearch = "xxx"; // modify your search URL (if required)
    $.get(urlForSearch, function (data) {
        $("#jqGridView").jqGrid('setGridParam',
            {
                datatype: 'local',
                data: data.Payload //My URL response json is in JSend format, thus storing the array in "data.Payload". You may simply use "data"
            })
            .trigger("reloadGrid");
    });
}

希望这有帮助!