You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在调用Kendo UI Grid数据源read后仅修改分页器显示页码?

问题描述

调用Kendo UI for jQuery Grid的dataSource.read()方法后,如何通过代码修改网格的当前页码?使用dataSource.page(x)会触发transport的read()调用,进而陷入无限循环。当前数据状态正常,无需再次调用dataSource.read,仅希望修改网格分页器的视觉显示(例如显示“第7页/共100页”)。调用任何*.page(x)方法(数据源或分页器的)都会触发不必要的dataSource read请求。

相关代码示例:

const fRead = function (e) {
    // 模拟REST接口返回
    const res = {
        data: [
            { m: 1 }, { m: 2 }, { m: 3 },
            { m: 4 }, { m: 5 }, { m: 6 }
        ],
        page: 2
    };
    return e.success(res);
    // 希望fRead执行后,网格的当前页码设置为2!
}

const newKnd = new kendo.data.DataSource({
    schema: {
        model: {
            fields: { m: { type:"number" } }
        }
    },
    pageSize: 6,
    pageable: true,
    serverPaging: true,
    serverSorting: true,
    sort: _sort,
    transport: {
        read: fRead,
    },
});
解决方案

以下几种方法可在不触发read()请求的前提下修改分页器显示页码:

方法1:通过schema的parse函数同步页码

在数据源的schema中添加parse函数,解析返回数据时直接修改数据源内部页码状态,不会触发read请求:

const newKnd = new kendo.data.DataSource({
    schema: {
        model: {
            fields: { m: { type:"number" } }
        },
        parse: function(response) {
            if (response.page) {
                // 解析阶段调用page()不会触发read请求
                this.page(response.page);
            }
            return response.data;
        }
    },
    pageSize: 6,
    pageable: true,
    serverPaging: true,
    serverSorting: true,
    sort: _sort,
    transport: {
        read: fRead,
    },
});

方法2:直接修改数据源私有属性并刷新分页器

手动修改数据源内部私有属性,然后强制刷新分页器显示:

// 可在grid的dataBound事件或read完成回调中执行
const grid = $("#yourGridId").data("kendoGrid");
const ds = grid.dataSource;

// 修改内部页码和总页数(按需设置)
ds._page = 2;
ds._total = 100;

// 刷新分页器
grid.pager.refresh();

注意:该方法依赖Kendo UI内部私有属性,版本更新时需验证兼容性。

方法3:临时禁用serverPaging后设置页码

先关闭serverPaging,设置页码后恢复,避免触发read请求:

const grid = $("#yourGridId").data("kendoGrid");
const ds = grid.dataSource;

// 保存原serverPaging状态
const originalServerPaging = ds.options.serverPaging;
// 临时禁用serverPaging
ds.options.serverPaging = false;
// 设置页码,无read请求
ds.page(2);
// 恢复原状态
ds.options.serverPaging = originalServerPaging;
// 刷新分页器
grid.pager.refresh();

内容的提问来源于stack exchange,提问作者mx7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 20:05:39