jqgrid - 如何在运行时动态添加/删除已定义的子网格

时间:2012-01-05 05:08:30

标签: jquery jqgrid

我正在使用jqGrid 1.5.2,我有一个网格作为子网格,父网格和子网格都处于单元格编辑模式,没有排序允许。

在父网格的loadComplete事件中,我成功删除了一些依赖于行数据的子网格,如下所示:

loadComplete: function() {
  var dataIds = $('#mygrid1').jqGrid('getDataIDs');
  for (var i = 0;i < dataIds.length; i++) {
    var data = $("#mygrid1").jqGrid('getRowData', dataIds[i]);
    if (data[i].hasChild='N') {
       var grid = $("#mygrid1");
       $("#"+dataIds[i]+" td.sgcollapsed",grid[0]).unbind('click').html('');
    }
  }
}

问题是

用户可以在父网格上更改data [i] .hasChild,因此我希望能够再次为该行扩展子网格。

我试过

$("#"+rowid+" td.sgcollapsed",grid[0]).bind('click').html('+');

将'click'事件绑定回元素;但是,它不起作用,即使'+'符号附加回子网格列,但点击事件不会触发......

有人可以给我任何想法,解决方案或替代方案吗?谢谢。

2012年1月6日

更新: 经过一整天的挖掘,以及“尝试和错误”,我找到了接近成功的方法,编码如下:

首先,在删除每一行的绑定之前,我尝试将.clone(true,true)中的'数据和事件数据'存储在一个数组中。

currChild[rowid] = $("#"+rowid+"td.sgcollapsed",grid[0]).clone(true,true);
$("#"+rowid+" td.sgcollapsed",grid[0]).unbind('click').html('');

然后,我通过

将克隆替换回元素
$("#"+rowid+" td.sgcollapsed",grid[0]).replaceWith(currChild[rowid]);

当我看到第一个改变时附着在子行上的子网格时,我很高兴;然后,我试图通过再绑定来删除它,似乎没问题。

但是,在同一行的第三次更改并尝试将子网格返回到行时,该行的子网格列已丢失,并且该行的左侧列已移位!

我测试了每一行,它们的行为相同,导致行丢失一列,并在第三次更改时向左移动。

现在已经是深夜了,先睡一觉;期待听到任何建议,我可以进一步发展。谢谢。

1 个答案:

答案 0 :(得分:1)

这是美好的早晨,想给自己一个游戏时间,因为我终于管理它并取得成功!

最后一个问题,在同一行的第三次更改中丢失子网格列,都是因为在我再次解除绑定之前我没有为该元素创建克隆(我在afterSaveCell事件中进行了动态更改。)< / p>

grid.collapseSubGridRow(rowid); //collapse subgrid before unbind 
currChild[rowid] = $("#"+rowid+"td.sgcollapsed",grid[0]).clone(true,true);
$("#"+rowid+" td.sgcollapsed",grid[0]).unbind('click').html('');

所以,在我解开unbind之前克隆之后,每件事情都是正确的和预期的。尼斯!

此外,如果任何人有任何解决方法和改进,或看到任何潜在的问题和纠正,我很乐意听到。谢谢。