再次,分页不起作用,直到我单击列标题进行排序,然后分页似乎工作正常。
<script type="text/javascript">
$(document).ready(function () {
$('#reportContainer').load('Reports/Scaffold.html', function () {
var dataSource = new kendo.data.DataSource({
transport: {
read: {
type: "POST",
url: Reports.ServiceURL.MyService,
dataType: "JSON",
contentType: "application/json",
data: { myParam: "1" },
serverPaging: true,
serverSorting: true
},
parameterMap: function (data, operation) {
return kendo.stringify(data);
}
},
batch: true,
pageSize: 50,
schema: {
data: "d"
}
});
$("#allGrids").kendoGrid({
dataSource: dataSource,
sortable: true,
pageable: true,
filterable: false,
height: 400,
columns: myModel
});
});
});
</script>
最佳答案
似乎您想要选择serverPaging
但是您将其放置在错误的位置。它是 DataSource
的字段,而不是 transport.read
的字段。您应该将其定义为:
var dataSource = new kendo.data.DataSource({
transport : {
read : {
type : "POST",
url : Reports.ServiceURL.MyService,
dataType : "JSON",
contentType: "application/json",
data : { myParam: "1" }
},
parameterMap: function (data, operation) {
return kendo.stringify(data);
}
},
serverPaging : true,
serverSorting: true,
batch : true,
pageSize : 50,
schema : {
data: "d"
}
});
注意:不要忘记,当您定义schema.data
时,您还需要定义记录总数,如果它来自您可能的服务器有类似的东西:
schema : {
data: "d",
total: "total"
}
服务器应该返回一些如下所示的 JSON:
{
"d": [
...
],
"total": 100
}
其中 100
是服务器中的记录总数,而不是 d
中的记录数。
如果不是serverPaging
,您可能会这样做:
schema : {
data: "d",
total: function(data) { return data.d.length; }
}
@BurkeHolland,如果您想知道发生的情况是网格实际上没有执行serverPaging
并且可能没有接收total
或者无法计算它。它既不在 serverPaging
模式下,也不在 serverSorting
模式下,因此当 @SkildLobster 单击标题时,它会对结果进行排序(也许它们已经排序),然后计算最终能够计算页面的网格数据长度的记录总数。
关于jquery - 在对列进行排序之前,Kendo 网格最初不会分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14203300/