jqGrid setRowData方法不更新隐藏的行

时间:2011-10-30 18:21:00

标签: jqgrid

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

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

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

干杯

更新1 - 重现问题:

以下是使用jqGrid官方演示重现问题的方法:

第1步

浏览到jqGrid的演示页面,在“版本3.7中的新功能”下打开名为“工具栏搜索”的演示

第2步

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

第3步

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

第4步

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

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

1 个答案:

答案 0 :(得分:2)

你误解了网格是如何构建的。网格可以包含隐藏列,但没有隐藏行。如果一个过滤网格将移除整个网格主体,并且只插入过滤的行。

方法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');