jqgrid autorefresh子网格问题

时间:2011-09-06 01:33:55

标签: jquery ajax jquery-plugins jqgrid jqgrid-php

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

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

效果很好。但我需要扩展子网格的解决方案。当网格刷新时,扩展的子网格正在关闭。

有没有办法刷新网格而不关闭扩展的子网格?

2 个答案:

答案 0 :(得分: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);
};

答案 1 :(得分:0)

看起来像their demo page正在将TR类从sgcollapsed更改为sgexpanded。我认为你可以保留一系列在刷新之前打开的TR并在之后重新打开它们。

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