Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jqgrid仅当存在某些数据时才打开子网格_Jqgrid_Subgrid - Fatal编程技术网

jqgrid仅当存在某些数据时才打开子网格

jqgrid仅当存在某些数据时才打开子网格,jqgrid,subgrid,Jqgrid,Subgrid,下面是我的子网格的声明: subGrid : true, subgridtype: 'json', subGridUrl: 'manuf_subgr.php', subGridModel: [{ name : ['Package','Sticker','Manufacturer'], width : [85,50,100], params: ['Catalog

下面是我的子网格的声明:

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

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

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

subGridOptions:{expandOnLoad:true}
您可以在“层次”/“加载时展开所有行”下看到隐藏的功能。我在中描述了一个重要问题。问题很快就出现了:jqGrid中使用的Ajax请求的内部实现在另一个挂起的(服务器尚未响应)工作时阻止(跳过)Ajax请求(请参见
.grid.hDiv.load
在代码的位置、子网格模块和中)。无论是
expandOnLoad:true
还是您当前的实现都不能保证新的Ajax请求将在前一个请求期间启动,但仍然没有响应。因此,不能打开所有子栅格。你的主要问题是:“如何防止打开空的子网格或如何隐藏它?”,我发现第二个(也不太重要)问题。即使您当前看到您的网站打开了所有子网格,也可能只有在打开一个或一些子网格之后,才能从离internet较远的地方访问同一网站

因此,我认为您应该更改web页面的设计(更改您希望在子网格中显示的内容)或更改实现,以便使用应打开的子网格列表构建一个队列,并且仅在打开前一个网格后才打开下一个网格


或者,可以在主栅格的响应中包含所有子栅格的数据。在这种情况下,您应该使用
subGridRowExpanded
callback来填充网格。如果在子网格中使用no
caption
和no
pager
选项,将获得与标准子网格相同的外观。此外,您将有更多的选择灵活性。我个人更喜欢子网格作为网格。

语法
rowId.row\u cnt
完全错误,因为
rowId
是一个字符串。你能提供更多的代码吗?是
row\u cnt
是网格中某列的名称吗?哪个
数据类型有网格?等@Oleg,著名的jqgrid专家;)我希望你能看到这篇文章。有趣的是,我从Tony post的jqgrid论坛上获得了这段代码,我在网上搜索,却找不到任何关于row_cnt方法的信息。但这并没有破坏剧本但现在我意识到我的想法完全错了。。。还是找不到更好的。。。我的意思是-应该有一种方法来检查json是否返回子网格上的任何数据?在您引用的帖子中,有一行
var rowdata=getDataIDs(rowid)if(rowdata.row\u cnt)==0之前的code>。因此,
行是列名。可能该列是隐藏的。您应该更好地描述您的场景。您不能只分析任何常规JSON数据,然后决定是否可以使用子网格更好地显示数据。另一方面,如果在主网格的JSON数据中提供相应的信息,则可以实现具有子网格的项的扩展。看,有很多不同的选择。例如,可以将子网格数据与主网格数据一起加载。使用
datatype:local
,但想法是一样的:一个数据源(
myGridData
在演示中)保存主网格和所有子网格的所有数据。中描述的问题可能对您非常重要
expandOnLoad:true
您尝试实现的选项在jqGrid中实现不正确。所以您必须以另一种方式实现它。@Oleg,我希望避免对数据库中的多个表进行一次大的查询,从而对子网格进行单独的查询。。。We’你以前的帖子我已经看过了。但问题是我在加载完成后打开所有子网格。。。打开所有的空盒子,然后它们都消失了,这看起来很奇怪。看到我的更新代码嗨,谢谢你的广泛回答。我尝试过使用expandOnLoad:true,但没有像您前面提到的那样成功-由于主挂起查询仍然存在,因此查询无法执行。因此,我在gridComplete上扩展子研磨时有“超时”延迟,这很好。该网站仅供内部使用,所以我不担心“远”的查询真的。。。您建议要么在请求之后在子网格上运行队列,要么在一个请求中运行所有队列——这仍然不能确保不会生成空子网格。有没有办法检查ajax是否返回子网格的任何数据?@Elen:Want我的意思是:在对主网格的响应中(
url:'sched.php'
)包含返回行的所有子网格的数据。例如,您可以使用
userdata
。加载主栅格后,可以打开所有子栅格(如果对应行包含非空栅格)。因为您已经在本地拥有了所有数据(例如,
$(“#schedule”).jqGrid(“getGridParam”,“userData”)
)中),所以您可以用与我以前引用您时相同的方法来执行此操作。@Elen:有关如何将
userData
放置在服务器响应中的详细信息,请参见示例。如果您以前没有使用过
userdata
,它非常简单。服务器响应的
userdata
属性的值可以是