2013-04-05 140 views
5

我想重新加载一个jqGrid新行,colNames和colModel。行数据似乎加载正常,但列似乎没有刷新。我试过使用GridUnload和GridDestroy,但我最终完全失去了jQuery DOM实例,并且不再加载任何数据。jqGrid reloadGrid并刷新新colModel和colNames

var grid = $('#my-grid'); 

if(grid[0].grid == undefined) { 
    grid.jqGrid(options); 
} else { 
    grid.setGridParam(options); 
    grid.trigger('reloadGrid'); 
} 

网格实例很重要,因为它将作为参数传递给其他对象。这些对象可能附加侦听器或触发事件。

我使用的版本4.4.2

回答

0

看来,jqGrid从DOM中删除最初的<table></table>并替换它或忘记参考(我没有看过那么难)。

所以你必须重新选择新的表,每次你想创建一个新的网格即。 $('table#my-grid')。如果您想将网格表的引用作为参数传递给应用程序的其他部分,这会非常棘手。

我的解决方法是删除网格引用,并用原始表格替换网格的包装div。然后用新的colModel和colNames以正常的方式创建一个jqGrid。

grid.empty(); 
delete grid[0].grid; 
$('#gbox_my-grid').replaceWith(grid); 
grid.jqGrid(options); 

这不是最整洁的解决方案,但它确实让我保持永久的参照原<table>。我不确定其他jqGrid插件如何受到这个影响。

编辑

原来jQuery DataTables是更适合的定制,我们都采用了这种而不是使用的jqGrid的。

5

reloadGrid重装只有体网格而不是改变创建网格时,就会创建一个列标题。

如果需要更改列的数量或使用colNamescolModel的地方,你已经老了网格或的重新网格。您可以先使用GridUnload方法,然后创建新的网格(请在您的案例中调用grid.jqGrid(data))。重要的是,如果您在代码中将jQuery选择器缓存到像grid这样的变量中,则必须在GridUnload之后再次分配grid,因此您应该在拨打GridUnload后直接执行类似grid = $("#grid");的操作。

有关更多详细信息和代码示例,请参阅the answer

+0

为使用GridUnload()使用的jqGrid()之前没有工作提到和尝试了第二类型时,它抛出'类型错误:d.emptyRows是null' jQuery中 – gawpertron 2013-04-05 14:42:54

+0

@gawpertron:我想你使用它以错误的方式。您可以验证参考答案中的演示在jqGrid 4.4.2或4.4.4中没有任何问题的情况下工作。我想你在使用'GridUnload'之后并没有重新分配'grid'的值,就像我在我的回答中所描述的那样。如果您遇到问题,您应该*将您的问题追加到您使用的**当前**代码*中。 – Oleg 2013-04-05 15:01:30

+0

@gawpertron:也请参见[答案](http://stackoverflow.com/a/9472895/315935)。 – Oleg 2013-04-05 15:03:36

1

我已经结合了这两个答案,并作了一些修改,以使其工作。

var grid = $('#tableID'); 

if(grid[0].grid == undefined) { 
    grid.jqGrid(options); 
} else { 
    delete grid; 
    $('#tableID').GridUnload('#tableID'); 
    $('#tableID').jqGrid(options); 
}