我正在尝试使用新行,colNames和colModel重新加载jqGrid。行数据似乎加载正常,但列似乎没有刷新。我已经尝试过使用GridUnload和GridDestroy,但我最终完全丢失了jQuery DOM实例,并且不再加载任何数据。
var grid = $('#my-grid');
if(grid[0].grid == undefined) {
grid.jqGrid(options);
} else {
grid.setGridParam(options);
grid.trigger('reloadGrid');
}
网格实例很重要,因为它将作为参数传递给其他对象。这些对象可能会附加侦听器或触发事件。
我正在使用版本4.4.2
答案 0 :(得分:5)
reloadGrid
仅重新加载网格的 body ,而不会更改创建网格时将创建的列标题。
如果您需要更改列数或使用colNames
和colModel
代替您拥有的旧网格或重新创建网格。您可以先使用GridUnload方法,然后创建新网格(在您的情况下调用grid.jqGrid(data)
)。重要的是,如果您将jQuery选择器缓存到代码中的grid
变量中,则必须在调用grid
后再分配GridUnload
,因此您应该执行grid = $("#grid");
之类的操作在GridUnload
调用后直接{1}}。
有关详细信息和代码示例,请参阅the answer。
答案 1 :(得分:1)
我已将两个答案合并并进行了一些修改,以使其发挥作用。
var grid = $('#tableID');
if(grid[0].grid == undefined) {
grid.jqGrid(options);
} else {
delete grid;
$('#tableID').GridUnload('#tableID');
$('#tableID').jqGrid(options);
}
答案 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。