即使使用正确的参数也无法显示最后一页

时间:2013-01-16 08:04:02

标签: jquery jqgrid

我和jqgrid一起战斗了大约8天(或更长时间),除了小小的事情我做了一切。我有一个大型数据库,我试图按部分显示它。我的意思是每次nextprevlastfirst或用户输入页码时都会执行sql查询。我管理了它,一切都是正确的,但现在网格没有显示正确的最后一页。我的意思是,即使有42页,也显示1中的1个。

现在,当我输入页码时,网格正在刷新并显示正确的结果,但是寻呼机说的是1 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"
        },

每次单击按钮时我用来运行查询的代码都在这里(注意下面的代码仅在按下enter时因为按钮处于非活动状态时才起作用):

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没有返回正确的页面?我确信我错过了一些小的东西。请帮帮我!!!

2 个答案:

答案 0 :(得分:5)

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

要理解:datatype: "jsonstring"类型与datatype: "local"几乎相同。最重要的区别是jqGrid在jsonReader的情况下使用datatype: "jsonstring"而在datatype: "local"的情况下使用localReader。数字页面将由jqGrid计算,服务器响应中totalrecords的值将忽略

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

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

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

$("#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, ...}
    ...
});

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

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

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

答案 1 :(得分:1)

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

  

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