2012-01-05 53 views
1

我正在使用jqGrid 1.5.2,我有一个网格作为子网格,父和子网格都处于单元格编辑模式,没有排序允许。jqgrid - 如何动态添加/删除运行时定义的子网格

在父网格的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(''); 
    } 
    } 
} 

问题是

数据[I] .hasChild可以由用户在父网格上更改,所以我希望子网格能够再次为该行进行展开。

我已经试过

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

到绑定事件 '点击' 回来的元素;然而,它不起作用,即使'+'标志附加到子网格列,但点击事件不会触发...

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

更新于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

这是一个伟大的早晨,想给自己一个游戏时间,因为我终于成功了!

最后一个问题,在同一行的第三次更改时丢失了一个子网格列,这完全是因为我没有为该元素创建一个克隆,然后再次解除绑定(我在afterSaveCell事件中做了动态更改)。

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(''); 

因此,在解除绑定之前我有一个克隆之后,每件事情都是正确的和预期的。太好了!此外,如果任何人有任何解决方法和改进,或看到任何潜在的问题和更正,我很乐意听到。谢谢。