2

ここに私のサブグリッドの宣言があります:

    subGrid : true,
    subgridtype: 'json',
    subGridUrl: 'manuf_subgr.php',
    subGridModel: [{    name  : ['Package','Sticker','Manufacturer'], 
                        width : [85,50,100],
                        params: ['Catalogue'] 
                    } 
    ],
    gridComplete: function() {
        var timeOut = 50;
        var rowIds = $("#schedule").getDataIDs();
        $.each(rowIds, function (index, rowId) {
            if(rowId.row_cnt != 0){
                setTimeout(function() {
                    $("#schedule").expandSubGridRow(rowId);
                }, timeOut);
                timeOut = timeOut + 200;
            }
        });
    }

私が期待しているif(rowId.row_cnt != 0)のは、jsonからデータが返されない場合にサブグリッドを開くことを妨げるこの行です...にもかかわらず、すべてのグリッドは開いています...

誰かが空のサブグリッドを開くための停止を実装するのを助けることができますか?

完全なコード:

jQuery("#schedule").jqGrid({
    url:'sched.php',
    datatype: "json",
    mtype:'GET',
    colNames:['Street_Date','Label','Catalogue', 'Artist', 'Title','UKDP','UPCEAN','format'],
    colModel:[
        {name:'Street_Date',index:'Street_Date desc, ID', sorttype:"date", formatter:'date', formatoptions: {newformat:'d/m/Y'}, width:75},
        {name:'label',index:'label', width:100,align:"center"},     
        {name:'Catalogue',index:'Catalogue', width:85},
        {name:'Artist',index:'Artist', width:120},
        {name:'Title',index:'Title', width:250},
        {name:'UKDP',index:'UKDP', width:35, align:"right", formatter:"number", sorttype:"float"},
        {name:'UPCEAN',index:'UPCEAN', width:120, align:"center"},      
        {name:'format',index:'format', width:70, sortable:false}
    ],
    height: "100%",
    rowNum:20,
    rowList:[10,20,30,50,100],
    sortname: 'id',
    viewrecords: true,
    sortorder: "desc",
    jsonReader : { 
        root: "rows", 
        page: "page", 
        total: "total", 
        records: "records", 
        repeatitems: true, 
        cell: "cell", 
        id: "id",
        userdata: "userdata", 
        subgrid: {root:"rows", repeatitems: true, cell:"cell" } 
    },
    pager: '#schedule_pager',
    caption:"Release Schedule",

    grouping:true,
    groupingView : {
        groupField : ['Street_Date']
    },


    subGrid : true,
    subgridtype: 'json',
    subGridUrl: 'manuf_subgr.php',
    subGridModel: [{    name  : ['Package','Sticker','Manufacturer'], 
                        width : [85,50,100],
                        params: ['Catalogue'] 
                    } 
    ],
    gridComplete: function() {
        var timeOut = 50;
        var rowIds = $("#schedule").getDataIDs();
        $.each(rowIds, function (index, rowId) {
            if(rowId.row_cnt != 0){
                setTimeout(function() {
                    $("#schedule").expandSubGridRow(rowId);
                }, timeOut);
                timeOut = timeOut + 200;
            }
        });
    },

    onSelectRow: function (rowId) {
        $("#schedule").jqGrid ('toggleSubGridRow', rowId);
    }
});
4

1 に答える 1

0

あなたはあなたが初心者であり、それを使用するのは2日目であるというコメントを書きます。jqGridは比較的複雑であり、実装しようとする最初の例は、初心者には複雑すぎるように思われます。データベースからのデータでfilljqGridをロードし、1つのグリッドでグループ化とサブグリッドを実行しようとします。

デモに実装しようとしていることは、オプションのexpandOnLoad: trueプロパティを使用することで解決できます。subGridOptions

subGridOptions: {expandOnLoad: true}

この機能は、 「階層」/「ロード時にすべての行を拡張する」で偽装された公式デモで確認できます。私が答えで説明した1つの重要な問題があります。問題はすぐに次のようになります。jqGridで使用されるAjaxリクエストの内部実装は、別の保留中(サーバーによってまだ応答されていない)が機能しているときにAjaxリクエストを防止(スキップ)します(ここ.grid.hDiv.loadingのコードの場所、ここのサブグリッドモジュールを参照してください。ここここここ)。また、現在の実装でも、以前のリクエストがまだ応答されていないときに新しいAjaxリクエストが開始されることを許可することはできません。したがって、すべてのサブグリッドを開くことはできませんexpandOnLoad: true。あなたの主な質問:「空のサブグリッドが開かないようにする方法、またはそれを隠す方法は?」、2番目の(そしてそれほど重要ではない)質問を見つけます。現在、Webサイトがすべてのサブグリッドを開いていることがわかったとしても、インターネットから離れた場所から同じサイトにアクセスすると、1つまたはいくつかのサブグリッドのみが開かれる可能性があります。

したがって、Webページのデザインを変更する(サブグリッドに表示するものを変更する)か、実装を変更して、開く必要のあるサブグリッドのリストを含むキューを作成し、次のグリッドを開く必要があると思います。前のものが開かれた後にのみ。

または、メイングリッドの応答にすべてのサブグリッドのデータを含めることもできます。この場合、コールバックを使用して、グリッドをグリッドとsubGridRowExpanded同じくらいサブグリッドで埋める必要があります。サブグリッドでnoおよびnoオプションを使用すると、標準のサブグリッドと同じ外観になります。さらに、オプションの柔軟性が大幅に向上します。私は個人的にグリッドとしてサブグリッドを好みます。captionpager

于 2012-11-23T18:23:16.183 に答える