我正在使用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]);
当我看到第一个改变时附着在子行上的子网格时,我很高兴;然后,我试图通过再绑定来删除它,似乎没问题。
但是,在同一行的第三次更改并尝试将子网格返回到行时,该行的子网格列已丢失,并且该行的左侧列已移位!
我测试了每一行,它们的行为相同,导致行丢失一列,并在第三次更改时向左移动。
现在已经是深夜了,先睡一觉;期待听到任何建议,我可以进一步发展。谢谢。
答案 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之前克隆之后,每件事情都是正确的和预期的。尼斯!
此外,如果任何人有任何解决方法和改进,或看到任何潜在的问题和纠正,我很乐意听到。谢谢。