我正在使用jqGrid的filterToolbar
方法让用户快速搜索/过滤网格数据。我正在使用loadonce: true
和datatype: local
作为我的网格配置。我的一个列有一个下拉(选择)过滤器类型,工作正常。
问题是当我尝试更新不可见的行(使用setRowData
)时(因为过滤器/搜索结果隐藏了它们),当我通过清除它来重新显示行时,行不会更新过滤
有什么建议吗?我也试过触发reloadGrid
事件,没有运气。
干杯
以下是使用jqGrid官方演示重现问题的方法:
浏览到jqGrid的演示页面,在“版本3.7中的新功能”下打开名为“工具栏搜索”的演示
在演示网格中,按代码列过滤值575878,以便网格上只显示第一行。
打开javascript控制台并更新当前不可见的行,在此示例更新第2行中:
jQuery("#toolbar").jqGrid('setRowData',2,{item_id:2,item:'blargh',item_cd:12345678});
通过清除过滤器值取消隐藏所有行,并查看第2行尚未更新!
我在这里做错了什么?可能的解决方法?
答案 0 :(得分:2)
你误解了网格是如何构建的。网格可以包含隐藏列,但没有隐藏行。如果一个过滤网格将移除整个网格主体,并且只插入过滤的行。
方法setRowData
可用于修改网格的任何行,但您无法修改网格中不存在的内容。
如果您使用本地网格(datatype: 'local'
),则您在网格中保存的数据将保存在两个内部jqGrid参数data
和_index
中。所以你应该修改data
对象。要使用修改后的data
填充网格,您需要致电.trigger("reloadGrid")
。
因此,如果您想修改rowid = 2的网格数据的item_id
,item
和item_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');