web*_*ad3 8 jquery jquery-plugins jqgrid
当我使用寻呼机分页记录时,我不想点击服务器并带回每一行.我读到如果我在.ajax函数的完整博客中设置datatype = local并且如果我设置loadonce:true那么我应该能够避免必须等待网格重新加载数据.
但是,当我执行这些操作时,网格不会转到下一页.它只是挂起......
我做错了什么?
jQuery(document).ready(function () {
jQuery("#list").jqGrid({
datatype: processrequest,
mtype: 'POST',
jsonReader: {
root: "rows", //arry containing actual data
page: "page", //current page
total: "total", //total pages for the query
records: "records", //total number of records
repeatitems: false,
id: "ID" //index of the column with the PK in it
},
colNames: ['Name', 'Title'],
colModel: [
{ name: 'name', index: 'name', width: 250 },
{ name: 'title', index: 'title', width: 250 }
],
pager: '#pager',
rowNum: 10,
rowList: [10, 20, 30],
sortorder: "desc",
viewrecords: true,
height: '250px',
caption: 'My first grid',
loadonce: true
}).navGrid('#pager', {edit: false, add: false, del: false});
});
function processrequest(postdata) {
...
$.ajax({
...
complete: function (jsondata, stat) {
if (stat == "success") {
var thegrid = jQuery("#list2")[0];
var jsonObject = (eval("(" + jsondata.responseText + ")"));
thegrid.addJSONData(jsonObject.d);
$(".loading").hide();
} else {
$(".loading").hide();
alert("Error with AJAX callback");
}
$("#list").setGridParam({ datatype: 'local' });
}
});
}
Run Code Online (Sandbox Code Playgroud)
Ole*_*leg 17
有一些误解.如果您使用datatype: local那么您必须使用类似的方法自己填充jqGrid,addRowData或者使用data参数设置数据一次(对于jqGrid版本3.7及更高版本).因此,datatype: local对jqGrid 的使用不会加载任何数据本身,您的datatype: processrequest参数将被忽略.
如果要使用loadonce: true自jqGrid版本3.7以来支持的参数,则应该具有jq或XML的jqGrid的所有参数(例如datatype: json在您的情况下)和附加参数 loadonce: true.然后在第一次加载数据后,jqGrid会将数据类型切换到datatype: local之后,它将在服务器上独立工作但忽略一些参数(如datatype: processrequest你的情况).
还有一个小小的评论.jsonReader您在示例中使用的大多数属性都是默认属性(请参阅此Wiki).您使用的参数将与默认属性组合,因此使用参数就足够了
jsonReader: { repeatitems: false, id: "ID"}
更新:好的杰夫.在我看来,要解决您的问题,您需要从双方获得更多代码示例:客户端和服务器.这是我为您创建并测试的一个小例子.
首先是服务器端.在ASMX Web服务中,我们定义了一个Web方法,用于为您的表生成测试数据:
public JqGridData TestMethod() {
int count = 200;
List<TableRow> gridRows = new List<TableRow> (count);
for (int i = 0; i < count; i++) {
gridRows.Add (new TableRow () {
id = i,
cell = new List<string> (2) {
string.Format("Name{0}", i),
string.Format("Title{0}", i)
}
});
}
return new JqGridData() {
total = 1,
page = 1,
records = gridRows.Count,
rows = gridRows
};
}
Run Code Online (Sandbox Code Playgroud)
类JqGridData和TableRow定义如下:
public class TableRow {
public int id { get; set; }
public List<string> cell { get; set; }
}
public class JqGridData {
public int total { get; set; }
public int page { get; set; }
public int records { get; set; }
public List<TableRow> rows { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在这里你可以看到,web方法TestMethod没有参数,并回发完整的数据.数据的分页,排序和搜索将由jqGrid(3.7或更高版本)完成.
要读取此类数据并放入jqGrid,我们可以执行以下操作:
$("#list").jqGrid({
url: './MyTestWS.asmx/TestMethod',
datatype: 'json',
mtype: 'POST',
loadonce: true,
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
serializeGridData: function (postData) {
return JSON.stringify(postData);
},
jsonReader: {
root: function (obj) { return obj.d.rows; },
page: function (obj) { return obj.d.page; },
total: function (obj) { return obj.d.total; },
records: function (obj) { return obj.d.records; }
},
colModel: [
{ name: 'name', label: 'Name', width: 250 },
{ name: 'title', label: 'Title', width: 250 }
],
rowNum: 10,
rowList: [10, 20, 300],
sortname: 'name',
sortorder: "asc",
pager: "#pager",
viewrecords: true,
gridview: true,
rownumbers: true,
height: 250,
caption: 'My first grid'
}).jqGrid('navGrid', '#pager', {edit: false, add: false, del: false, search: true},
{},{},{},{multipleSearch : true});
Run Code Online (Sandbox Code Playgroud)
关于jqGrid定义的一些评论:
要通过JSON与ASMX Web服务进行通信,需要在相应的jQuery.ajax请求中执行以下操作:
dataType: 'json' 必须设定.contentType:'application/json; charset=utf-8' 必须设定.要做我使用的所有这些datatype,ajaxGridOptions以及serializeGridDatajqGrid的参数.我用JSON.stringify函数做JSON编码(相应的JavaScript可以从这里下载).
然后必须解码接收的数据.我使用我最喜欢的jqGrid jsonReader功能- 使用函数(请参阅此SO帖子和此wiki).
在我们使用的结束loadonce: true,其改变datatype从jqGrid的的'json'到'local',我们可以立即使用的本地寻呼的所有优势,分类搜索和高级搜索,因为jqGrid的3.7版已有.
如果您确实希望使用ASMX Web服务进行服务器端分页,排序和搜索(或高级搜索),则也可以.为了在这里保存一个小地方并分开代码示例,我将在x pager的另一个问题jqgrid页面1中发布相应的示例(参见更新的部分).