如何仅在某些行上显示 jqGrid 子网格?

How to show jqGrid subgrid on certain rows only?

我使用 jqGrid and with a little help from this answer 创建了一个具有多个子网格级别的网格。这是我目前拥有的:

我正在尝试修改它以仅在有数据要显示时才显示子网格。也就是说如果count > 0。从逻辑上讲,我尝试添加一个条件(下面的伪代码,基于前面提到的答案):

原码

var gridParams = {
    datatype: 'local',
    data: myGridData,
    colNames: ['Column 1', 'Column 2'],
    colModel: [
        { name: 'col1', width: 200 },
        { name: 'col2', width: 200 }
    ],
    ...
    subGrid: true,
    subGridRowExpanded: function (subgridDivId, rowId) {
        var subgridTableId = subgridDivId + "_t";
        $("#" + subgridDivId).html("<table id='" + subgridTableId + "'></table>");
        $("#" + subgridTableId).jqGrid({
            datatype: 'local',
            data: mySubgrids[rowId],
            colNames: ['Col 1', 'Col 2', 'Col 3'],
            colModel: [
                { name: 'c1', width: 100 },
                { name: 'c2', width: 100 },
                { name: 'c3', width: 100 }
            ],
            ...
        });
    }
}

$("#grid").jqGrid(gridParams);

调整后的代码

var gridParams = {
    datatype: 'local',
    data: myGridData,
    colNames: ['Column 1', 'Column 2'],
    colModel: [
        { name: 'col1', width: 200 },
        { name: 'col2', width: 200 }
    ],
    ...
}

// Condition added HERE
if (count > 0)
{
    gridParams.subGrid = true;
    gridParams.subGridRowExpanded = function (subgridDivId, rowId) {
        var subgridTableId = subgridDivId + "_t";
        $("#" + subgridDivId).html("<table id='" + subgridTableId + "'></table>");
        $("#" + subgridTableId).jqGrid({
            datatype: 'local',
            data: mySubgrids[rowId],
            colNames: ['Col 1', 'Col 2', 'Col 3'],
            colModel: [
                { name: 'c1', width: 100 },
                { name: 'c2', width: 100 },
                { name: 'c3', width: 100 }
            ],
            ...
        });
    }
}

$("#grid").jqGrid(gridParams);

但这惨遭失败:

这是根本不受支持还是我做错了什么?

如果我正确理解了你的问题,那么你想要删除子网格中没有元素的行的“+”(扩展子网格)图标。在这种情况下,您可以使用 the old answer 中描述的老技巧。您可以添加 loadComplete 句柄,从具有 subGrid: true 选项的网格中删除一些“+”图标。您只需要知道没有子网格的所有行的 rowids 并为 rows

$("#" + rowid + ">td.sgcollapsed").unbind("click").html("");

已更新:我发布了 free jqGrid 的修改,它允许在没有上述 hack 的情况下轻松实现要求。

The demo 演示新功能。实施起来非常容易。它包含 subGridOptions 内部的 hasSubgrid 回调。回调有 options,它是具有属性 rowiddata 和两个不太重要的属性 iRowiCol 的对象。演示代码使用 options.data 表示行的数据。只有当输入行的 tax 高于 20.

时,该演示才会创建子网格
subGridOptions: {
    hasSubgrid: function (options) {
        return parseFloat(options.data.tax) > 20;
    }
}

如果我正确理解你输入数据的格式,你可以在你的情况下使用 mySubgrids[options.data.rowid].length