jqGrid reloadGrid并刷新新的colModel和colNames

时间:2013-04-05 14:28:20

标签: javascript jquery jqgrid

我正在尝试使用新行,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

3 个答案:

答案 0 :(得分:5)

reloadGrid仅重新加载网格的 body ,而不会更改创建网格时将创建的列标题。

如果您需要更改列数或使用colNamescolModel代替您拥有的旧网格或重新创建网格。您可以先使用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。