在循环中动态扩展子网格 - JQGrid

时间:2011-11-08 06:36:27

标签: javascript jqgrid subgrid

我使用subGridRowExpanded为子网格创建子网格。

我想动态扩展网格的某些行,所以我写了以下内容 在第一个网格的GridComplete事件中。 ids是我的网格的行ID的数组

for(int i =0; i< ids.length; i++) {
    //Checking with condition
    $("#myGridName").expandSubGridRow(ids[i]);
}

我也试过以下代码,但由于某些原因,第二级GridComplete中的复选框仅为最后一个展开的行添加。

$("#myGridName").expandSubGridRow(ids[0]);
$("#myGridName").expandSubGridRow(ids[1]);

上面的代码展开了适当的行。但是,

在Subgrid的GridComplete事件中,我在每行中选中了复选框。

所以,在这里我需要检查一些Chekc盒子。

但问题是,

subgrid_row_id出错了

即。要扩展的最后一个子网格的ID在父网格的SubGridRowExpanded中分配。

注意:我手动将复选框添加到子网格中的每一行

先谢谢。

1 个答案:

答案 0 :(得分:0)

如果我理解你是正确的,那么你就会遇到the answer中讨论的非常接近的问题。您尝试做的似乎与subGridOptions选项的expandOnLoad: true属性相同。就像我在the answer中描述的那样,jqGrid不支持对Ajax请求进行排队。如果你执行

$("#myGridName").expandSubGridRow(ids[0]);

使用远程datatypesubgridtype('json'或'xml'),Ajax请求将被发送到服务器。直到我们从服务器收到内部属性的相应响应

$("#myGridName")[0].grid.hDiv.loading

将设置为true,而$("#myGridName").expandSubGridRow(ids[1])中的所有其他Ajax请求将仅跳过(忽略)

expandOnLoad: true的当前实现中存在同样的问题(错误)。如果您在the official jqGrid demo“Hierarchy(4.0)new”树节点中打开,然后查看演示“在加载时展开所有行”,您将看到并非所有行都已正确扩展承诺(你必须滚动网格才能看到所有的子网格。)

我认为要正确地在负载上扩展子网格,你应该做以下的

  • 您应该检查已折叠的子网格列表(相应的行具有“sgcollapsed”类),仅展开第一个找到的子网格
  • 只有在收到并处理来自服务器的响应后才能扩展下一个子网格

我建议您使用success jqGrid选项的ajaxSubgridOptions回调函数,因为加载子网格后没有loadComplete事件。子网格中当前的Ajax请求实现使用jQuery.ajaxcomplete回调函数(请参阅here),在 success回调之前将其称为。因此,您可以将success回调定义为jqGrid的ajaxSubgridOptions选项的方法。在success回调内部,您可以为下一个节点调用$("#myGridName").expandSubGridRow(ids[i])(如果仍未展开)。你可以打开所有子网格。

更有效地枚举子网格the answer可能对您有所帮助。