5

我正在与 jqgrid 战斗大约 8 天(或更长时间),除了一个小问题之外,我什么都做了。我有一个很大的数据库,我正在尝试按部分显示它。我的意思是每次当next, prev, last,first或用户输入页码时都会执行 sql 查询。我已经管理它并且一切都是正确的,但是现在网格没有显示正确的最后一页。我的意思是,即使有 42 页,它也显示 1 of 1。

现在,当我输入页码时,网格正在刷新并显示正确的结果,但寻呼机说 2 of 1、5 of 1 等等。

我使用的是:

jQuery("#list").jqGrid({ 
        datatype: "jsonstring",
        datastr: JSON.stringify(gridDtls),
        jsonReader:{
          root: "rows",
          page: "page",
          total: "total",
          records: "records",
          repeatitems: false,
          id: "0"
        },

每次单击按钮时我用来运行查询的代码在这里(请注意,下面的代码仅在按下回车时才有效,因为按钮处于非活动状态):

onPaging: function(pgButton){ 
            var status = returnUserStatus();
            var page1 = $(this).jqGrid("getGridParam", "page");
            var totalPages = $(this).getGridParam('lastpage');

            if(pgButton=="next_pager"){ 


            } 
            if(pgButton=="prev_pager"){ 


            } 
            if(pgButton=="last_pager"){ 

            }
            if(pgButton=="first_pager"){ 

            }else if((pgButton !="first_pager") && (pgButton !="last_pager") && (pgButton !="prev_pager") && (pgButton !="next_pager"))     

        },

一切对我来说似乎都是正确的。为什么 jqgrid 没有返回正确的页面?我确定我缺少一些小东西。请帮我!!!

4

2 回答 2

5

我想你的问题的原因是datatype: "jsonstring"你使用服务器端分页。而不是你应该使用datatype: "json".

为了理解:类型datatype: "jsonstring"几乎与datatype: "local". 最重要的区别是 jqGridjsonReader在 case of中使用datatype: "jsonstring"而不是localReader在 case of 中使用datatype: "local"。页数将由 jqGrid 计算,total并且records来自服务器响应的值将被忽略

jqGrid 提供了很多自定义选项来向服务器发送几乎所有 Ajax 请求并读取几乎所有响应。您只需要使用相应的选项。因为您没有发布有关服务器接口的任何详细信息,所以我无法在此处写更多详细信息。

我建议您检查选项prmNamesajaxGridOptions以及回调serializeGridDataloadBeforeSend. 该选项允许自定义对服务器的请求。另一个选项jsonReaderjsonmap回调beforeProcessing允许读取服务器响应。

更新演示演示了如何在 jqGrid 分页时使用自动datatype: "json"发送 Ajax 请求。选择网格很重要。在您的情况下,它似乎是列。所以代码可能是idlogin

$("#userslist").jqGrid({
    url: "admin",
    postData: {
        WrJOB: "listUsers",
        companyId: function () { return $("#companyId").val(); },
        userStatus: function () { return returnUserStatus(); }
    },
    jsonReader: {
        root: "gridDtls.rows",
        page: "gridDtls.page",
        total: "gridDtls.total",
        records: "gridDtls.records",
        repeatitems: false
    },
    prmNames: {page: "pageNum"},
    colModel: [
        {name: 'login', key: true, ...}
    ...
});

对 URL 的请求"admin"将自动包含pageNum参数。参数的值"rows"将是 20。它是页面的大小。如果用户在寻呼机中选择另一个值(请参阅 参考资料rowList: [20, 40, 60]),当前值将被发送到服务器。该选项prmNames将默认参数重命名"page""pageNum". 以同样的方式,您可以重命名将 jqGrid 发送到服务器的任何其他参数。用作null值将阻止向服务器发送参数。例如,您可以使用

prmNames: {page: "pageNum", nd: null, search: null, sort: null, order: null}

消除发送您不使用的参数。

于 2013-01-16T08:52:26.083 回答
1

以前没有使用过 jqgrid,但在wiki中找到了这一行:

如果您使用 jsonstring 来获取数据 - 检索数据后,数据类型选项自动设置为本地 - 即(当前)分页将不起作用!

于 2013-01-16T08:50:19.433 回答