【问题标题】:How to set number of pages in Jqgrid when using local data使用本地数据时如何在Jqgrid中设置页数
【发布时间】:2016-04-27 09:50:01
【问题描述】:

从客户端传递数据时是否可以覆盖 jqgrid 的行为?我知道这是从服务器获取数据时,但我的问题是不同的。 这是 jsfiddle 链接:http://jsfiddle.net/fott25/wdvsjwrg/

我也会在这里发布我的代码,我的 html:

<table id="list"></table>
<div id="pager"></div>

这是我的 javascript,其中包含数据和 jqgrid 初始化:

var myData = [{
    id: 1,
    name: "aaz"
}, {
    id: 2,
    name: "bbz"
}, {
    id: 3,
    name: "ccz"
}, ];

$("#list").jqGrid({
    datastr: myData,
    datatype: "jsonstring",
    jsonReader: {
        page: function(datastr) {
            return 2;
        },
        total: function(datastr) { 
            return 10; 
        },
    }, 
    colNames: ["Id", "Name"],
    colModel: [{
        name: "id",
        index: "id",
        sorttype: "int"
    }, {
        name: "name",
        index: "name"
    }],
    rowNum:1,
    caption: "Viz Test",
    pager: '#pager',
});

这是代码的结果:

如您所见,我尝试在 jsonReader 属性中将总页数设置为 10,但 jqgrid 忽略了该属性。将页面设置为第二个效果很好。 是否可以覆盖总页码?

编辑 #1:我尝试将 lastpage 设置为 10,但它不起作用

【问题讨论】:

  • 您尝试实施哪种方案?为什么要使用datatype: "jsonstring",这与带有错误total (lastpage) 值的datatype: "local" 几乎相同?如果用户单击下一页按钮,则将尝试显示 以前加载的本地数据,这是不可能的。必须使用onPaging 回调来解决问题。一般来说,可以使用updatepager 回调将寻呼机设置为任何值,但我不确定网格是否会希望你在那之后期待。可能是你走错了方向。您尝试实现什么场景?
  • 我们在我们的应用程序中进行了某种过滤,我们填充请求数据并通过 ajax 请求发送它以从服务器获取数据。来自服务器的数据包括 rows 和 numberOfPages 值。之后,我们必须使用该数据填充数据网格并将其设置为 jqgrid,因此我必须使用 jsonstring 或 local 和 datastr。我的目标是实现 onPagingEvent 以便它调用 javascript 函数来获取数据并使用新数据重新创建 jqgrid。我知道这是一种反模式,但不幸的是,这似乎是目前唯一的方法。你有什么建议吗?我会看看 updatepager,也许我错过了什么
  • 只有当需要显示的总行数非常大(至少>10000)时,才应该实施这种方案。 The demo 演示了本地分页排序和过滤4000行13列20行/页网格的性能。 Another demo 使用 40000 行并且在 Chrome 中仍然足够快。到 Web 服务器的典型往返可能需要 更多时间 作为本地分页。想一想。
  • the old answer 提供了updatepager 的用法示例。我忘了提到 jqGrid 的行为可能取决于您使用的 jqGrid 版本以及使用的 fork 版本。我开发了free jqGrid fork,我可以推荐你。它在每个已发布版本的 README 和 the wiki 中都描述了许多增强功能。
  • 不幸的是,我们无法将所有数据传输到客户端,这不是因为 jqgrid,而是因为后端、数据库和网络连接到我们的生产服务器的速度。非常感谢您的努力,我会更多地查看您提供的链接。

标签: javascript html jqgrid


【解决方案1】:

一般来说updatepager 的使用非常简单。您只需设置 jqGrid 的 page recordslastpage 选项,然后调用 updatepager as

this.updatepager(false, true);

如果代码在另一个 jqGrid 回调中执行,或者

$("#grid")[0].updatepager(false, true);

重要的是要提到updatepager 不要重新加载网格。它只是在寻呼机中设置值并启用/禁用寻呼机按钮。

将寻呼机值的手动设置与onPaging回调的实现结合起来非常重要。有关updatepager 的用法示例,请参见the old answer

谨慎使用onPaging 回调,这些选项在不同版本的jqGrid 中会多次更改。你可以在the wiki article阅读更多关于这些问题的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    相关资源
    最近更新 更多