3

jqGrid v4.3.2
ie9
win7enterprise

次のコードを使用してサブグリッドを生成しています。

http://www.trirand.com/blog/jqgrid/jqgrid.html- >詳細->サブグリッドとしてのグリッド

私はこれをし、私は持っています

第1レベルのサブグリッドOK
  第2レベルのサブグリッドOK
    第3レベルのサブグリッドOK
      第4レベルのサブグリッド第3レベルのsgのすべての行にサブグリッドOKをロードしますが、第3レベルのsgの最初の行IDのデータのみを表示します。

開発者ツールを確認すると、リクエストは常に3番目のサブグリッドの最初の行のIDを送信することがわかります。これは、すでに試したpostDataにカスタムパラメーターを追加する方法と、jqgridのサブグリッドに対するOlegKpostDataからのこの回答を知っています。動作していませんか?(これは私の場合は機能しません。データはリクエストに追加されません)

次のイベントからrowdidを返そうとしましたが、うまくいきませんでした。それでも3番目のサブグリッドの最初の行IDが返されるため、3番目のサブグリッドのすべての行に対して子サブグリッドは常に同じものを返します。

subGridRowExpanded  //always returns first row id of the third grid
onSelectRow  //doesn't fire if we click the + icon for expanding the subgrid
beforeSelectRow  //doesn't fire at all

もう1つの奇妙な動作は、第3レベルのサブグリッドのいずれかの行をクリックすると、最初の行のみが選択されることです。

いいえ、treegridを使用することはできません。申し訳ありません。

3番目のレベルのサブグリッドの各行のプラスアイコン(最初のセル)でクリックイベントをバインドしてexpandSubGridRowを起動することを考えていますが、質問は残ります。3番目のレベルでクリックした行のROWIDを取得するにはどうすればよいですか。サブグリッド

よろしくお願いいたします。よろしくお願いいたします。

jQuery("#listsg11").jqGrid({
    url:'server.php?q=1',
    datatype: "xml",
    height: 190,
    colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'],
    colModel:[
        {name:'id',index:'id', width:55},
        {name:'invdate',index:'invdate', width:90},
        {name:'name',index:'name', width:100},
        {name:'amount',index:'amount', width:80, align:"right"},
        {name:'tax',index:'tax', width:80, align:"right"},      
        {name:'total',index:'total', width:80,align:"right"},       
        {name:'note',index:'note', width:150, sortable:false}       
    ],
    rowNum:8,
    rowList:[8,10,20,30],
    sortname: 'id',
    viewrecords: true,
    sortorder: "desc",
    multiselect: false,
    subGrid: true,
    caption: "Grid as Subgrid",
    subGridRowExpanded: function(subgrid_id, row_id) {
        var subgrid_table_id;
        subgrid_table_id = subgrid_id+"_t";
        $("#"+subgrid_id).html("<table id='"+subgrid_table_id+"' class='scroll'></table>");
        jQuery("#"+subgrid_table_id).jqGrid({
            url:"subgrid.php?q=2&id="+row_id,
            datatype: "xml",
            colNames: ['No','Item','Qty','Unit','Line Total'],
            colModel: [
                {name:"num",index:"num",width:80,key:true},
                {name:"item",index:"item",width:130},
                {name:"qty",index:"qty",width:70,align:"right"},
                {name:"unit",index:"unit",width:70,align:"right"},
                {name:"total",index:"total",width:70,align:"right",sortable:false}
            ],
            subGrid: true,
            caption: "Grid as Subgrid",
            subGridRowExpanded: function(subgrid_id2, row_id2) {
                var subgrid_table_id2;
                subgrid_table_id2 = subgrid_id2+"_t";
                $("#"+subgrid_id2).html("<table id='"+subgrid_table_id2+"' class='scroll'></table>");
                jQuery("#"+subgrid_table_id2).jqGrid({
                    url:"subgrid.php?q=3&id="+row_id2,
                    datatype: "xml",
                    colNames: ['No','Item','Qty','Unit','Line Total'],
                    colModel: [
                        {name:"num",index:"num",width:80,key:true},
                        {name:"item",index:"item",width:130},
                        {name:"qty",index:"qty",width:70,align:"right"},
                        {name:"unit",index:"unit",width:70,align:"right"},
                        {name:"total",index:"total",width:70,align:"right",sortable:false}
                ],
                subGrid: true,
                caption: "Grid as Subgrid",
                subGridRowExpanded: function(subgrid_id3, row_id3) {
                    var subgrid_table_id3;
                    subgrid_table_id3 = subgrid_id3+"_t";
                    $("#"+subgrid_id3).html("<table id='"+subgrid_table_id3+"' class='scroll'></table></div>");
                    jQuery("#"+subgrid_table_id3).jqGrid({
                        url:"subgrid.php?q=4&id="+row_id3,
                        datatype: "xml",
                        colNames: ['No','Item','Qty','Unit','Line Total'],
                        colModel: [
                            {name:"num",index:"num",width:80,key:true},
                            {name:"item",index:"item",width:130},
                            {name:"qty",index:"qty",width:70,align:"right"},
                            {name:"unit",index:"unit",width:70,align:"right"},
                            {name:"total",index:"total",width:70,align:"right",sortable:false}
                    ]
                    });
                }
                });
            }
        });
    }
});
4

1 に答える 1

4

ページに表示される *すべての** サブグリッドの *data 間で ID の競合が発生していると思います。たとえば、開いているグリッドのいくつかのレベルで、rowid として "1" を持つデータを挿入する場合、どのサブグリッドの他のデータも同じサブグリッドで挿入しないでください。

理解のために:サブグリッドのすべてのレベルの列に使用key:trueします。対応する値は、グリッド セル内の列 ( 内)"num"だけでは使用されません。また、グリッドまたはサブグリッドの行の属性の値としても使用されます( )。HTML は、ページ上での ID の重複を許可しません。そのため、ID が重複する要素を挿入すると、Web ブラウザーによって異なる奇妙な効果が生じる可能性があります。たとえば、ある行を選択しようとすると、別の行が選択されます。行の選択として、はるかに難しい問題も発生する可能性があります。そのため、 ID がページ全体で一意になるように、グリッドを埋める必要があります。"num"<td>here</td>id<tr>

ID の重複に関する問題が存在しないことを確認するには、idPrefixオプションを使用できます。レベル0で使用できます

idPrefix: "m"

(メインから)たとえば。次のレベルのサブグリッドには、次を使用できます

idPrefix: "s" + row_id + "_"

次のレベルのサブグリッド用

idPrefix: "s" + row_id + "_" + row_id2 + "_"

idPrefix: "s" + row_id + "_" + row_id2 + "_" + row_id3 + "_"

の定義は、前のすべてのレベルのサブグリッドのjQuery("#"+subgrid_table_id3)内部にあります。したがって、外側のスコープにアクセスして定義subGridRowExpandedできます。row_idrow_id2

変更後、あなたが説明した問題のような奇妙な問題が発生しないことを願っています。

DUPLICATESのサンプルはこちら

クリックして 4 番目のグリッドを表示すると、3 番目のグリッド

于 2012-04-20T13:51:44.587 に答える