jqgrid只有在有一些数据时才打开子网格

时间:2012-11-23 14:19:39

标签: jqgrid subgrid

这是我的子网格的声明:

    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);
    }
});

1 个答案:

答案 0 :(得分:0)

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

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

subGridOptions: {expandOnLoad: true}

您可以在“层次结构”/“展开加载的所有行”下伪装成the official demo上的功能。我在the answer中描述了一个重要问题。问题很快就出现了以下问题:jqGrid中使用的Ajax请求的内部实现阻止(跳过)另一个待处理(尚未由服务器回答)的Ajax请求(请参阅代码位置.grid.hDiv.loading {{3}子网格模块中的{},herehereherehere)。 expandOnLoad: true和您当前的实现都不能承认在前一个Ajax请求仍未响应的情况下将启动新的Ajax请求。所以你可以没有打开所有子网格。你的主要问题是:“如何防止打开空子网格或如何隐藏它?”,我找到了第二个(也不那么重要)的问题。即使您目前看到您的网站打开了所有子网格,也可能是从互联网的更远处访问同一网站只会打开一个或一些子网格。

所以我认为您应该更改网页的设计(更改要在子网格中显示的内容)或更改实现,以便使用子网格列表构建队列应该打开,只有在打开前一个网格后才会打开下一个网格

或者,您可以在主网格的响应中包含所有子网格的数据。在这种情况下,您应使用subGridRowExpanded回调将网格填充为here。您在子网格中不使用captionpager选项,您将获得与标准子网格相同的外观。此外,您将在选项中拥有更多灵活性。我个人更喜欢将网格作为网格。