动态展开循环中的子网格- JQGrid

Dynamically Expand Subgrid in a loop - JQGrid

本文关键字:网格 JQGrid 循环 动态      更新时间:2023-09-26

我有一个网格与子网格使用subGridRowExpanded.

我想动态扩展网格的一些行,所以我写了下面的内容在GridComplete事件的第一个网格。id是我的Grid的行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事件中,我在每一行中都勾选了复选框。

那么,这里我需要勾选一些复选框。

但问题是,

subgrid_row_id出错

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

注意:我手动为子网格

中的每一行添加复选框

如果我理解正确的话,你的问题与答案中讨论的非常接近。您尝试做的似乎与subGridOptions选项的expandOnLoad: true属性应该做的相同。正如我在回答中所描述的那样,jqGrid不支持Ajax请求排队。如果执行

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

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

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

将设置为true,并且所有其他Ajax请求(例如来自$("#myGridName").expandSubGridRow(ids[1])的请求)将只是跳过(忽略)

同样的问题(bug)存在于当前expandOnLoad: true的实现中。如果你在官方的jqGrid演示中打开"Hierarchy (4.0) new"树节点,然后查看演示"Expand all Rows on load",你会看到不是所有的行都像承诺的那样正确地展开(你必须滚动网格才能看到所有子网格)。

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

  • 您应该检查已折叠的子网格列表(相应的行具有"sgcollapse"类),并且只展开第一个找到的子网格
  • 下一个子网格的扩展应该在服务器的响应被接收和处理之后才进行

我可以推荐你使用ajaxSubgridOptions jqGrid选项的success回调函数,因为加载子网格后没有loadComplete事件。当前在子网格中Ajax请求的实现使用了jQuery的complete回调函数。ajax(见这里),它将在 success回调之前调用。因此,可以将success回调定义为jqGrid的ajaxSubgridOptions选项的方法。在success回调中,您可以为下一个节点调用$("#myGridName").expandSubGridRow(ids[i])(如果仍有未展开的节点)。你可以打开所有的子网格。

为了更有效地枚举子网格,答案可能对您有帮助。