我正在使用SQL Server端分页来检索JQGrid的数据。有大约15k行被返回,所以由于JSON字符串大小的限制,我一次只抓取一个页面。 SQL查询有效,但传递给我的C#Web服务的页码从不增加到2以上。它在第1页和第1页上完美运行。 2.据推测,网格需要结果集中的记录总数以及计算的总页数。很容易理解,但如何在网格中设置此信息?这会解决页码不会超过2的问题吗?
这是我网格的代码。 UpdateShortCalls有点冗长,因为我从我的另一个应用程序“借用”它,它有多个case语句来处理添加,编辑,删除。不包括C#,因为我知道它可以工作并返回数据。只要它得到正确的页面#传递。
function ShowStatuses() {
jQuery("#grdECHShortCalls").jqGrid('GridUnload');
jQuery("#grdECHShortCalls").jqGrid({
jsonReader: {
repeatitems: false,
root: 'Table',
page: function (obj) { return 1; },
total: function (obj) { return 2; },
records: function (obj) { return obj.ItemCount; },
id: "0"
},
pgbuttons: true,
recordtext: "Total: {2}",
emptyrecords: "No records found",
loadtext: "Loading...",
pgtext: "",
datatype: function () {
UpdateShortCalls("getShortCalls");
},
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
colNames: ['Location', 'Supervisor', 'Agent', 'ANSLOGIN', 'CallDate', 'CallId', 'ACD', 'TALKTIME' ],
colModel: [
{ name: 'Location', index: 'Location' },
{ name: 'Supervisor', index: 'Supervisor', width: 150 },
{ name: 'Agent', index: 'Agent', width: 100 },
{ name: 'ANSLOGIN', index: 'ANSLOGIN', width: 100 },
{ name: 'CallDate', index: 'CallDate', width: 150 },
{ name: 'CallId', index: 'callid', width: 100 },
{ name: 'ACD', index: 'ACD', width: 120 },
{ name: 'TALKTIME', index: 'TALKTIME', width: 100 }
],
rowNum: 100,
height: "100%",
autoWidth: true,
rowList: [],
pager: $('#shortCallPager'),
toppager: true,
sortname: 'Location',
viewrecords: true,
sortorder: 'asc',
gridview: true,
grouping: true,
groupingView: {
groupField: ['Location', 'Supervisor'],
groupDataSorted: true,
hideFirstGroupCol: true,
groupCollapse: false,
plusicon : "ui-icon-plus",
minusicon : "ui-icon-minus"
}
});
jQuery("#grdECHShortCalls").jqGrid({ pgbuttons: true, recordtext: '' });
jQuery('#grdECHShortCalls').jqGrid('gridResize');
}
function UpdateShortCalls(m, args) {
var data = "";
var method = "";
var func = "";
switch (m) {
case "getShortCalls":
method = "GetShortCallDetails";
var postdata = $("#grdECHShortCalls").jqGrid('getGridParam', 'postData');
data = '{ sortidx: "' + postdata.sidx +
'", sortorder: "' + postdata.sord +
'", page: "' + postdata.page +
'", rows: "' + postdata.rows +
'", issearch: "' + postdata._search +
'", searchfield: "' + postdata.searchField +
'", searchval: "' + postdata.searchString +
'", searchops: "' + postdata.searchOper + '"}';
var args = [];
args.push(postdata._search);
func = "getShortCalls";
break;
default:
return;
}
utl.ajax(srvurl + method, data, func, args);
}
答案 0 :(得分:0)
你可以发布服务器端吗?在返回数据时,如果使用delault jgqrid 映射,则应该包含字段total
,其中包含总行数integer
。
此外,@ Oleg的answer可以帮助您解决问题。
答案 1 :(得分:0)
我明白了!对于其他有类似问题的人......我从我的SQL查询中返回第二个表,其中包含当前页码,总页数和总记录数。将其作为JSON字符串中的另一个表包含在内。修改了我创建JQGrid的JavaScript函数 - 特别是jsonReader:部分来显示这些值。现在,网格知道有多少记录正在按预期进行分页。终于到了#2的页面!
function ShowStatuses() {
jQuery("#grdECHShortCalls").jqGrid('GridUnload');
jQuery("#grdECHShortCalls").jqGrid({
jsonReader: {
repeatitems: false,
root: 'Table',
total: function (d) { return d.Table1[0].TotalPgs; },
records: function (d) { return d.Table1[0].Cnt; },
page: function (d) { return d.Table1[0].Page; },
id: "0"
},
pgbuttons: true,
emptyrecords: "No records found",
loadtext: "Loading...",
datatype: function () {
UpdateShortCalls("getShortCalls");
},
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
colNames: ['Location', 'Supervisor', 'Agent', 'ANSLOGIN', 'CallDate', 'CallId', 'ACD', 'TALKTIME' ],
colModel: [
{ name: 'Location', index: 'Location' },
{ name: 'Supervisor', index: 'Supervisor', width: 150 },
{ name: 'Agent', index: 'Agent', width: 100 },
{ name: 'ANSLOGIN', index: 'ANSLOGIN', width: 100 },
{ name: 'CallDate', index: 'CallDate', width: 150 },
{ name: 'CallId', index: 'callid', width: 100 },
{ name: 'ACD', index: 'ACD', width: 120 },
{ name: 'TALKTIME', index: 'TALKTIME', width: 100 }
],
rowNum: 100,
height: "100%",
autoWidth: true,
rowList: [],
pager: $('#shortCallPager'),
toppager: true,
sortname: 'Location',
viewrecords: true,
sortorder: 'asc',
gridview: true,
grouping: true,
groupingView: {
groupField: ['Location', 'Supervisor'],
groupDataSorted: true,
hideFirstGroupCol: true,
groupCollapse: false,
plusicon : "ui-icon-plus",
minusicon : "ui-icon-minus"
}
});
//jQuery("#grdECHShortCalls").jqGrid({ pgbuttons: true, recordtext: '' });
jQuery('#grdECHShortCalls').jqGrid('gridResize');
}