0

我有带有子网格的 jqGrid。

如何从子网格中获取行?我做错了什么?下面的函数,我正在尝试获取行,但总是有错误。

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

        });




    }  


});

有输出到控制台:

//加载完成

rids:2 - 这意味着我们在主网格中有 2 行。这是真的。

但是当我尝试获取子网格行时,它返回 0

sdl:0 - 为什么?

但是所有数据都已加载!

如果我无法从 loadComplete 中的子网格获取数据,如何在网格加载后获取子网格数据?

我必须使用什么事件?

4

1 回答 1

0

首先,在 jqGrid 中实现子网格有很多不同的方法。您应该发布有关您的实施的模式详细信息。

通常在填充主网格期间,它只会在网格中包含名为“subgrid”的附加列colModel。该列仅包含一个图标("ui-icon-plus"例如,带有类的“+”),它使用用户打开子网格。只有当用户单击“+”符号时,才会添加并填充带有子网格的新附加行。

因此,您在主网格内找不到任何子网loadComplete格,因为目前没有子网格。

答案显示了如何获得当前打开的子网格。可以在自定义导航按钮onSelectRow内部、许多其他回调内部或内部使用它,但原因不在loadComplete.

你应该更详细地解释你真正需要什么。可能您实现了加载网格的所有数据,包括所有子网格的数据。例如,请参阅答案。在这种情况下,您可以访问所有子网格中的所有数据。

更新:我仍然不明白你想做什么,但无论如何你发布的代码都有重要问题。您忘记了对服务器的 Ajax 请求将被异步处理。因此,如果您只是开始加载子网格,url: getDataUrl + "&subgrid=" + getCell(row_id)并不意味着子网格已经在loadComplete主网格中出现。此外,您应该了解expandSubGridRow方法调用只会模拟click事件(参见源代码),该处理也可以是异步的。

我会再向您转发一次答案,该答案显示如何一次加载所有子网格数据。通过这种方式,您可以解决许多问题并减少不必要的服务器往返。大概

于 2013-01-30T07:08:01.440 回答