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

时间:2015-09-22 14:29:16

标签: javascript jquery jqgrid subgrid

我使用jqGrid创建了一个包含多个子网格级别的网格,并在answer的帮助下提供了一些帮助。这是我目前的情况:

Grid current status

我试图修改它,只显示子网格,如果有数据要显示。换句话说,如果是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);

但这只是悲惨地失败了:

enter image description here

这根本不受支持,或者我做错了什么?

1 个答案:

答案 0 :(得分:2)

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

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

更新:我发布了free jqGrid的修改版,允许在没有上述黑客攻击的情况下轻松实现要求。

The demo演示了这项新功能。实施非常简单。它包含hasSubgrid内的subGridOptions回调。回调具有options,该对象具有属性rowiddata和两个不太重要的属性iRowiCol。演示代码使用options.data代表行的数据。仅当输入行的tax高出20时,该演示才会创建子网格。

subGridOptions: {
    hasSubgrid: function (options) {
        return parseFloat(options.data.tax) > 20;
    }
}

如果我正确理解输入数据的格式,您可以在案例中使用mySubgrids[options.data.rowid].length