0

サブグリッド付きのjqGridがあります。

subGridから行を取得する方法は?私が間違っているのは何ですか?以下の関数。行を取得しようとしていますが、常にエラーが発生します。

loadComplete: function() {
    var rowIds = $("#list4").getDataIDs();

    $.each(rowIds, function (index, rowId) 
    {
        //var rows = jQuery("#list4_"+rowId+"_t").GetRowCount();
        //var rows = jQuery("#list4_"+rowId+"_t").getRowData(rowId);
        var sgtable = $("#list4_" + rowId + "_t");

        $.each(sgtable.rows, function(i, rId) //rows is undefined
        {
            console.log("rId:" + rId);
            var cdn = jQuery("#list4_"+rowId+"_t").jqGrid('getCell', rId, 'ItemTypeName');
            var cdv = jQuery("#list4_"+rowId+"_t").jqGrid('getCell', rId, 'ItemValue');

            console.log("cdn:" + cdn);
            console.log("cdv:" + cdv);
        });
    });
}  


 var rows = $("#list4_" + rowId + "_t").getDataIDs();

行は常に==0です。

更新しました!

グリッド:

グリッド

以下の完全なコード。

jQuery("#list4").jqGrid({

    url: getDataUrl,
    datatype: "json",
    autowidth: false,
    shrinkToFit: true,
    height: 'auto',
    loadonce:true,
    colNames: ['ContractNo', 'ParentName', 'ItemTypeName', 'ItemValue', 'ParentItemID', 'ItemID'],
    colModel: 
    [
        { name: 'ContractNo', index: 'ContractNo', hidden: true },
        { name: 'ParentName', index: 'ParentName', hidden: true },
        { name: 'ItemTypeName', index: 'ItemTypeName'/*,width: gwdth/2 */},
        { name: 'ItemValue', index: 'ItemValue'/*,width:gwdth/2*/ },
        { name: 'ParentItemID', index: 'ParentItemID', hidden: true },
        { name: 'ItemID', index: 'ItemID', hidden: true }
        ],
    subGrid: true,
    caption: "Contract items",
    subGridOptions: 
        {
            "expandOnLoad":true
        },
    gridComplete: function () {
        var rowIds = $("#list4").getDataIDs();

        $.each(rowIds, function (index, rowId) {
            $("#list4").expandSubGridRow(rowId); 

            var sdata =  $("#list4_" + rowId + "_t").getDataIDs();
             console.log("ri: "+rowId+". sdlEXP:" + sdata.length);
        });
    }, 
    subGridRowExpanded: function (subgrid_id, row_id) 
    {
        var subgrid_table_id, pager_id;
       // gwdth = $('div').width();
        subgrid_table_id = subgrid_id + "_t";
        pager_id = "p_" + subgrid_table_id;
        console.log("sqt_id: "+subgrid_table_id);
        $("#" + subgrid_id).html("<div style='margin-left:0px'><table id='" + subgrid_table_id + "' class='scroll'><tr><td>Testing</td></tr></table><div id='" + pager_id + "' class='scroll'></div></div>");
        jQuery("#" + subgrid_table_id).jqGrid({
            colNames: ['ContractNo', 'ParentName', 'ItemTypeName', 'ItemValue', 'ParentItemID', 'ItemID'],
            colModel: 
            [
                { name: 'ContractNo', index: 'ContractNo', hidden: true  },
                { name: 'ParentName', index: 'ParentName', hidden: true },
                { name: 'ItemTypeName', index: 'ItemTypeName'/*, width: gwdth/2 - 102*/},
                { name: 'ItemValue', index: 'ItemValue'/*, width: gwdth/2*/},
                { name: 'ParentItemID', index: 'ParentItemID', hidden: true },
                { name: 'ItemID', index: 'ItemID', hidden: true }
            ],
            height: 'auto',
            rowNum: 20,
            //  sortorder: "asc",
            shrinkToFit: true,
            url: getDataUrl + "?subgrid=" + getCell(row_id),
            // datastr: topicjson,
            //  datatype: "jsonstring",
            datatype: "json",
            treeGrid: true,
            treeGridModel: "adjacency",
            ExpandColumn: "ItemTypeName",
            // sortname: 'ParamNameEN',
            //loadonce: true,
            ExpandColClick: true,
            // SortTree:-1,
            // sortable: true,
            viewrecords: true,
            url: getDataUrl + "&subgrid=" + getCell(row_id),
        });
    },
    loadComplete: function() {

        var sn = 150;
        var sv = 400;

        var rowIds = $("#list4").getDataIDs();
        console.log("rids:" + rowIds.length);

         $.each(rowIds, function (index, rowId) 
         {
             console.log("#list4_" + rowId + "_t");

             var sdata =  $("#list4_" + rowId + "_t").getDataIDs();
             console.log("sdl:" + sdata.length);

        });




    }  


});

コンソールへの出力があります:

// loadcomplite

rids:2-これは、メイングリッドに2つの行があることを意味します。それは本当です。

しかし、サブグリッドの行を取得しようとすると、0が返されました

sdl:0-なぜですか?

しかし、すべてのデータがロードされます!

loadCompleteでサブグリッドからデータを取得できない場合、グリッドの読み込み後にサブグリッドデータを取得するにはどうすればよいですか?

どのイベントを使用する必要がありますか?

4

1 に答える 1

0

まず第一に、jqGrid でサブグリッドを実装するにはさまざまな方法があります。実装に関するモードの詳細を投稿する必要があります。

通常、メイン グリッドの塗りつぶし中に、グリッド内およびグリッド内に「サブグリッド」という名前の追加の列が含まれますcolModel。列に"ui-icon-plus"は、ユーザーを使用してサブグリッドを開くアイコン (たとえば、クラスの「+」) のみが含まれます。ユーザーが「+」記号をクリックした場合にのみ、サブグリッドを含む新しい行が追加されて入力されます。

loadCompleteそのため、現時点ではサブグリッドがないため、メイン グリッド内にサブグリッドを見つけることができません。

答えは、現在開いているサブグリッドを取得する方法を示しています。カスタム ナビゲーター ボタンの内部、onSelectRow他の多くのコールバックの内部または内部でこれを使用できますが、内部では使用できませんloadComplete

本当に必要なものをより詳細に説明する必要があります。おそらく、すべてのサブグリッドのデータを含むグリッドのすべてのデータのロードを実装しました。たとえば、答えを参照してください。その場合、すべてのサブグリッドからすべてのデータにアクセスできます。

更新: あなたが何をしたいのかまだわかりませんが、あなたが投稿したコードには重要な問題があります。サーバーへの Ajax リクエストが非同期で処理されることを忘れています。したがって、サブグリッドのロードを開始しただけでは、サブグリッドがメイン グリッドにurl: getDataUrl + "&subgrid=" + getCell(row_id)既に表示されているわけではありません。さらに、メソッドの呼び出しはイベントをシミュレートするだけloadCompleteであることを理解する必要があります(ソース コードを参照)。この処理は非同期でも可能です。expandSubGridRowclick

すべてのサブグリッド データを一度にロードする方法を示す回答にもう一度転送します。このようにして、多くの問題を解決し、サーバーへの不要なラウンド トリップを減らすことができます。おそらく

于 2013-01-30T07:08:01.440 に答える