我和jqgrid一起战斗了大约8天(或更长时间),除了小小的事情我做了一切。我有一个大型数据库,我试图按部分显示它。我的意思是每次next
,prev
,last
,first
或用户输入页码时都会执行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没有返回正确的页面?我确信我错过了一些小的东西。请帮帮我!!!
答案 0 :(得分:5)
我认为您的问题的原因是datatype: "jsonstring"
,您使用服务器端分页。而不是你应该使用datatype: "json"
。
要理解:datatype: "jsonstring"
类型与datatype: "local"
几乎相同。最重要的区别是jqGrid在jsonReader
的情况下使用datatype: "jsonstring"
而在datatype: "local"
的情况下使用localReader。数字页面将由jqGrid计算,服务器响应中total
和records
的值将忽略。
jqGrid提供了很多自定义选项,几乎可以向服务器发送任何Ajax请求并读取几乎所有响应。您只需使用相应的选项即可。因为您没有发布有关服务器接口的任何详细信息,所以我不能在此处写更多详细信息。
我建议您检查选项prmNames
,ajaxGridOptions
以及回调serializeGridData
和loadBeforeSend
。该选项允许自定义对服务器的请求。另一个选项jsonReader
和jsonmap
以及回调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来获取数据 - 在数据之后 自动检索数据类型选项设置为本地 - 即 (目前)分页不起作用!