【问题标题】:jqGrid setRowData method doesn't update hidden rowsjqGrid setRowData 方法不更新隐藏行
【发布时间】:2011-10-30 18:21:00
【问题描述】:

我正在使用 jqGrid 的filterToolbar 方法让用户快速搜索/过滤网格数据。我使用loadonce: truedatatype: local 作为我的网格配置。我的一个列有一个下拉(选择)过滤器类型,效果很好。

问题是当我尝试更新不可见的行(使用setRowData)时(因为过滤器/搜索结果隐藏了它们),当我通过清除过滤器重新显示它们时,该行没有得到更新。

有什么建议吗?我也尝试过触发reloadGrid 事件,没有运气。

干杯

更新 1 - 重现问题:

这里是重现问题的方法,使用 jqGrid 的官方演示:

第一步

浏览到 jqGrid 的演示页面,并在 'New in version 3.7' 下打开名为 'Toolbar search' 的演示

第 2 步

在演示网格中,按值为 575878 的代码列进行过滤,以便网格上仅显示第一行。

第三步

打开 javascript 控制台并更新当前不可见的行,在此示例中更新第 2 行: jQuery("#toolbar").jqGrid('setRowData',2,{item_id:2,item:'blargh',item_cd:12345678});

第四步

通过清除过滤器值取消隐藏所有行,并看到第 2 行没有更新!

我在这里做错了什么?可能的解决方法?

【问题讨论】:

  • 您应该在问题中包含您使用的 JavaScript 代码和从服务器返回的 JSON 数据。之后,其他人将能够重现您的问题。通常setRowData 也可以处理隐藏数据。
  • @Oleg 我已经用重现问题的步骤更新了问题,似乎 setRowData 不适用于隐藏行。还有其他方法可以更新这些隐藏的行吗?干杯

标签: jqgrid


【解决方案1】:

您误解了网格的构建方式。网格可以包含隐藏列,但没有隐藏行。如果是一个过滤器网格,则整个网格体将被删除,并且只会插入过滤后的行。

setRowData 方法可用于修改网格的任何行,但不能修改网格中不存在的内容。

如果您使用本地网格 (datatype: 'local'),那么您保存在网格中的数据将保存在两个内部 jqGrid 参数 data_index 中。所以你应该修改data 对象。要使用修改后的data 填充网格,您需要调用.trigger("reloadGrid")

因此,如果您想修改 rowid=2 的网格数据的列 item_iditemitem_cd,您可以执行以下步骤。

1) 获取对内部jqGrid参数data_index的引用:

var $myGrid = jQuery("#toolbar"),
    data = $myGrid.jqGrid('getGridParam', 'data'),
    index = $myGrid.jqGrid('getGridParam', '_index');

2) 获取代表您需要的 rowid 的对象的引用:

var rowId = '2',
    itemIndex = index[rowId],
    rowItem = data[itemIndex];

3)根据需要修改数据项:

rowItem.item_id = 2;
rowItem.item = 'blargh';
rowItem.item_cd = 12345678;

4) 通过重新加载网格来刷新网格包含(如果需要)

$myGrid.trigger('reloadGrid');

【讨论】:

  • 嗨@Oleg你有一个更完整的例子吗?我无法获取本地单元格数据更新以将页面保存到页面,当我返回到更新的页面时,它似乎丢失了。这些设置:loadonce:truedatatype:local 等。谢谢
猜你喜欢
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多