【问题标题】:jqGrid pager problem after adding a row with addRowData使用 addRowData 添加行后的 jqGrid 寻呼机问题
【发布时间】:2011-09-05 12:03:56
【问题描述】:
var index = 'id';
var ajaxResponse = [{id: 1, name: 'John', email: 'john@doe.co.uk'}, {id: 2, name: 'Michael', email: 'michael@example.com'}];
$('#grid').addRowData(index, ajaxResponse);

在逐一添加多行后,寻呼机不会遵守每页限制,寻呼机也会报告第 1 页,共 0 页。

在我从网格的页脚点击刷新按钮后,我看到每页的行数和页数都是正确的。

关于如何解决的任何想法?

谢谢。

【问题讨论】:

  • 添加行后调用刷新 jQuery("#grid").trigger("reloadGrid");
  • 可能对addRowData 的工作方式存在误解。这正是 jqGrid 的低级修改。你应该更清楚地解释你想做什么addRowData 的两个参数的名称看起来很可疑。您是否尝试使用从服务器接收到的 JSON 数据填充网格?为什么在这种情况下使用addRowData?您能否包含更多您使用的代码(jqGrid 定义以及如何从服务器获取数据)?包含测试 JSON 数据 (ajaxResponse) 也很有帮助。
  • 好的,现在当我一次添加多行时,看起来 reloadGrid 可以工作,也许我在单行上做错了,但感谢 Naga
  • @NagaHarishM 您应该将其添加为答案,以便我们对其进行投票,并且 OP 可以将此问题标记为已回答。因为这将帮助其他有同样问题的人(如果我读过你的评论会对我有所帮助,遗憾的是我直接去找答案,过了一会儿我找到了相同的解决方案,并准备在这里回答)。
  • @MarianoDesanze 已添加回答

标签: javascript jquery-plugins jqgrid


【解决方案1】:

您没有发布您使用的完整代码。所以我只能猜测你在做什么。

如果您在ajaxResponse 中有用于填充网格的完整数据,您可以创建 包含数据的网格。您可以将data: ajaxResponsegridview: true 一起使用。如果将一次创建整个网格:

var mydata = [
        {id: 1, name: 'John', email: 'john@doe.co.uk'},
        {id: 2, name: 'Michael', email: 'michael@example.com'}
    ];

$("#list").jqGrid({
    datatype: 'local',
    data: mydata,
    colNames: ['Name', 'E-Mail'],
    colModel: [
        {name: 'name', width: 100},
        {name: 'email', width: 150}
    ],
    rowNum: 5,
    rowList: [5, 10, 20],
    pager: '#pager',
    gridview: true,
    rownumbers: true,
    sortname: 'name',
    sortorder: 'desc',
    caption: 'Just simple local grid',
    height: 'auto'
});

(见演示here

如果你像这样从服务器获取 JSON 格式的数据

[
    {"id": 1, "name": "John",    "email": "john@doe.co.uk"},
    {"id": 2, "name": "Michael", "email": "michael@example.com"}
]

您可以将url参数设置为提供数据和使用的服务器URL

$("#list").jqGrid({
    url: 'Nicolae2.json',
    datatype: 'json',
    jsonReader: {
        repeatitems: false,
        root: function (obj) { return obj; },
        page: function () { return 1; },
        total: function () { return 1; },
        records: function (obj) { return obj.length; }
    },
    loadonce: true,
    colNames: ['Name', 'E-Mail'],
    colModel: [
        {name: 'name', width: 100},
        {name: 'email', width: 150}
    ],
    rowNum: 5,
    rowList: [5, 10, 20],
    pager: '#pager',
    gridview: true,
    rownumbers: true,
    sortname: 'name',
    sortorder: 'asc',
    caption: 'Just simple local grid',
    height: 'auto'
});

从服务器直接填充每个 Ajax 的网格。您必须提供正确排序数据的唯一限制。所以我将前面示例中的sortorder: 'desc' 更改为sortorder: 'asc'。见第二个演示here

【讨论】:

  • 这个呢? jsfiddle.net/yauhen/aY59T/9 我想添加新行,这样它将出现在最后一页而不更改当前页面。我还需要定期将表中的数据与来自其他位置的数据合并,因此我检查网格中的所有数据,比较来自其他位置的 id,并希望在网格中添加/删除记录。我不想刷新完整的网格,因为它可能很长。例如,对于 knockoutjs 示例 jsfiddle.net/ZCJQw/1(请参阅此处的详细信息 raw.github.com/gist/908284/…
  • @Yauhen.F:我不完全理解您的要求。你有哪个datatype?网格将如何填充?网格是否包含排序数据?你用loadonce: true吗?您需要的网格的完美外观是什么等等?因此,如果您在描述完整要求和网格填充方案的情况下打开新问题会更好。
  • @Yauhen.F 调用$("#list").trigger('reloadGrid'); 解决了这个问题。检查:jsfiddle.net/protron/aY59T/33
  • @MarianoDesanze:我已经确认在您的演示中使用reloadGrid 将是您场景中的解决方案。另一方面,addRowData 的大多数使用场景要么是错误的,要么是缓慢的(至少对于大量行而言)。重新加载网格仅使用本地 dataaddRowData 做 2 件事:将行添加到本地 data 对 DOM 进行一些更改,这需要时间,而且你不想要。在我之前的评论中,我建议您只在data 中进行修改,然后重新加载网格。看jsfiddle.net/OlegKi/aY59T/34
  • @MarianoDesanze:您还缺少一件事:输入数据应包含默认属性名称id 而不是uid 的rowid(请参阅here)。更改属性可以解决问题:jsfiddle.net/aY59T/36。或者,您可以指定 jqGrid jsfiddle.net/OlegKi/aY59T/37localReader: { id: "uid" } 选项。最后,我建议您从旧的 jqGrid 4.6 升级到 free jqGrid 4.15.2。 “Free jqGrid”是我从2014年底开始开发的jqGrid的fork。
【解决方案2】:

添加行后调用刷新jQuery("#grid").trigger("reloadGrid");

【讨论】:

    猜你喜欢
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多