2012-01-05 18 views
1

私はjqGrid 1.5.2を使用しています。サブグリッドとしてグリッドを持ちます。親とサブグリッドの両方がソート許可なしのセル編集モードです。親グリッドのloadCompleteイベントにjqgrid - 実行時に定義されたサブグリッドを動的に追加/削除する方法

、私が成功した以下のように行のデータに依存サブグリッドの一部を除去:

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)を指定して 'data and events data'を格納しようとしました。

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]); 

バック要素にクローンを置き換えます。その後、もう一度バインドを解除して削除しようとしましたが、問題はありません。

しかし、同じ行の3回目の変更で、サブグリッドを再び行に戻そうとすると、行のサブグリッド列が失われ、その行の左に列がシフトします。

私はすべての単一行をテストし、行が列を失い、3回目の変更で左に移動するのと同じ動作をしました。

今は深夜です。まず寝るよ。どんな提案も聞いてくれることを楽しみにしており、私はこれをさらに進めることができます。ありがとうございました。

答えて

1

私は最終的にそれを管理し、この成功を収めているので、これは素晴らしい朝であり、ゲーム時間を与えたいです!私は再びそれをunbinded前に、私は要素のクローンを作っていなかったので、

最後の問題、同じ行の第三の変化でサブグリッド列をlosting、すべてのだった(私は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(''); 

したがって、バインド解除前にクローンを作成した後、すべてのことが正しく行われます。ニース!

また、誰かが回避策や改善を行っている場合、または潜在的な問題と修正を見た場合は、私は聴きたいと思うでしょう。ありがとうございました。

関連する問題