3

再次分页不起作用,直到我单击列标题进行排序,然后分页似乎工作正常。

<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>
4

2 回答 2

5

似乎你想选择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 点击标题时,它对结果进行排序(可能它们已经排序),然后它从最终能够计算页面的网格数据长度计算记录总数.

于 2013-01-07T22:38:36.323 回答
0

在 MVC Kendo 网格的情况下,我看不到添加模式的明显方法。我通过在加载后对网格进行排序来解决问题,如下所示。在网格中,我添加了一个数据绑定事件:

@(Html.Kendo().Grid<tpnconnect.com.Models.Tools.NonWorkingDay>()
            .Name("Holiday_Grid")
            .Events(e => e
                .DataBound("sortHolidayGridByDate")
            )

我使用了一个 JavaScript 变量来防止事件被多次触发:

<script>
    var firstBind = true;

    function sortHolidayGridByDate() {
        if (firstBind == true) {
            firstBind = false;
            var grid = $("#Holiday_Grid").data("kendoGrid");
            var dsSort = [];
            dsSort.push({ field: "NonWorkingDate", dir: "desc" });
            grid.dataSource.sort(dsSort);
        }
    }
</script>
于 2016-01-28T12:29:29.217 回答