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

您在评论中写道您是新手,这是您使用它的第二天。jqGrid 相对复杂,您尝试实现的第一个示例在我看来对于新手来说太复杂了。您尝试使用数据库中的数据加载填充 jqGrid,并在一个网格中进行分组和子网格。

您尝试在演示中实现的内容可以通过使用选项的expandOnLoad: true属性来解决subGridOptions

subGridOptions: {expandOnLoad: true}

您可以在“Hierarchy”/“Expand all Rows on load”下的官方演示中看到该功能。我在答案中描述了一个重要问题。问题很快就出现了:jqGrid 中使用的 Ajax 请求的内部实现在另一个未决(服务器尚未回答)正在工作时阻止(跳过)Ajax 请求(请参见此处.grid.hDiv.loading的代码位置,此处的子网格模块和这里这里这里)。无论是您当前的实现还是您当前的实现都不能在前一个仍然没有响应的过程中启动新的 Ajax 请求。所以你不能打开所有的子网格expandOnLoad: true. 您的主要问题是:“如何防止打开空子网格或如何隐藏它?”,我发现第二个(也是不太重要的)问题。即使您当前看到您的网站打开了所有子网格,也可能是从互联网更远的地方访问同一站点将仅在打开一个或一些子网格之后进行。

因此,我认为您应该更改网页的设计(更改要在子网格中显示的内容)或更改实现,以便构建一个包含应打开的子网格列表的队列,然后打开下一个网格只有在上一个之后才会打开。

Alternatively you can includes the data for all subgrids in the response for the main grid. In the case you should use subGridRowExpanded callback to fill the grids as subgrid as grid. You you would use no caption and no pager option in the subgrids you will be get the same look as with the standard subgrids. Additionally you will have much more flexibility in the options. I personally prefer to subgrid as grid.

于 2012-11-23T18:23:16.183 回答