5

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

4

3 回答 3

7

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

如果您需要更改列数或使用colNamescolModel网格代替旧网格,您可以使用或重新创建网格。您可以先使用GridUnload方法,然后创建新网格(grid.jqGrid(data)在您的情况下调用)。重要的是,如果您将 jQuery 选择器缓存到grid代码中的变量中的网格中,您必须grid在调用 of 之后再分配一次GridUnload,因此您应该grid = $("#grid");在调用 of 之后直接执行类似的操作GridUnload

有关更多详细信息和代码示例,请参见答案

于 2013-04-05T14:37:53.470 回答
1

似乎 jqGrid<table></table>从 DOM 中删除了初始值并替换它或忘记了引用(我没有仔细研究它)。

因此,每次要创建新网格时都必须重新选择新表,即。$('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。

于 2013-04-05T16:24:58.937 回答
1

我结合了这两个答案并进行了一些修改以使其正常工作。

var grid = $('#tableID');

if(grid[0].grid == undefined) {
  grid.jqGrid(options);
} else {
  delete grid;
  $('#tableID').GridUnload('#tableID');
  $('#tableID').jqGrid(options);
}
于 2014-01-15T02:17:44.163 回答