5

サブグリッドのあるグリッドがあります。サブグリッドが必要なのは、メイングリッドの最初の行だけです。

Googleとhttp://www.trirand.com/....i:subgrid&s[]=hidecolで見つけたソリューション は機能しません。

迅速で汚い(ハードコードされた)解決策はありますか?

4

1 に答える 1

14

jQuery("#grid_id").hideCol('subgrid');サブグリッドを展開または折りたたむために使用できる完全な列を削除して「サブグリッド」列を非表示にするため、この方法を使用することはできません。

「サブグリッド」列の内容をクリアし、loadCompleteイベント ハンドル内のセルの「クリック」イベントをバインド解除することをお勧めします。

loadComplete: function() {
    $("td.sgcollapsed:not(:first)","#list").unbind('click').html('');
}

次の結果が得られます: 代替テキスト (対応するライブの例をここで見ることができます)。loadCompleteイベントは任意のページで呼び出されることを理解することが重要です。そのため、2 番目のページでは、最初の行にのみ subrgid があります。

サブグリッドが必要な行を選択する際により複雑なロジックを実装する必要がある場合は、次のコードを使用できます

loadComplete: function() {
    var grid = $("#list");
    var subGridCells = $("td.sgcollapsed",grid[0]);
    $.each(subGridCells,function(i,value){
        if (i!==0) {
            $(value).unbind('click').html('');
        }
    });
}

上記のコードはステートメントと同じことを行い$("td.sgcollapsed:not(:first)","#list").unbind('click').html('')ますが、コードの最後のバージョンを簡単に変更して、より複雑な動作を実装できます。

UPDATED : によって識別される一部の行に対してのみ有害なサブグリッドが必要な場合は、rowid使用できます

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

(ここでライブを参照) の内部loadComplete。id が等しくないすべての行のサブグリッドを無効にする必要がある場合はrowid、次のようなものを作成できます

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

(ライブはこちら

更新:無料の jqGridには、 answer : hasSubgridcallback で指定できる新機能が記載されていますsubGridOptions。サブグリッドを持たない行を jqGrid に通知できます。

于 2010-12-27T12:33:56.413 に答える