0

目前我使用此代码刷新网格:

setInterval(function(){  jQuery("#grid").trigger("reloadGrid"); },10000);

它运作良好。但我需要扩展子网格的解决方案。当网格刷新时,扩展的子网格正在关闭。

有没有办法在不关闭扩展的子网格的情况下刷新网格?

4

2 回答 2

1

这是一个老问题,但我在同样的事情上苦苦挣扎,所以我想我会分享我所做的。Eonasdan 的回答是正确的。在我的例子中,我向 subGridRowExpanded 和 subGridRowCollapsed 事件添加了代码来存储已展开的行的行 ID(我一次只允许展开一行,但您也可以使用集合)。然后我为表的 loadComplete 事件添加了代码,以重新打开回发后折叠的行。这部分很明显,但这里有两个关键点: 1. 重新扩展子网格不会导致其数据由于某种原因被持久化。所以我不得不回到服务器来获取它。我通过重新提交子网格行(它具有网格的 id、下划线和 rowid)来做到这一点。2. 出于某种原因,您必须使用计时器并在延迟后扩展子网格(即使 1ms 似乎也可以)。就像您无法在 loadComplete 事件本身期间扩展网格一样,但是如果您等待一个滴答声,它就可以正常工作。

所以像这样:

var expandSubGrid = function(){

    $('#grid').jqGrid('expandSubGridRow', expandedRowID);
    $('#grid_' + expandedRowID).trigger('reloadGrid');
};


//the loadComplete event handler which was wired up when I created the grid
var grid_loadComplete = function () {
    //expand the subgrid
    window.setTimeout(expandSubGrid, 1);
};
于 2012-04-12T18:29:21.057 回答
0

看起来他们的演示页面正在将 TR 类从 sgcollapsed 更改为 sgexpanded。我认为您可以保留一组在刷新之前打开的 TR,然后在刷新之后重新打开它们。

我对 jqGrid 知之甚少,但我想我会发布这个,因为它似乎从聊天中为你指明了正确的方向。

于 2011-09-06T15:07:13.880 回答