JqGrid重新加载Grid并保持折叠/展开状态和子表格。

5
我有一个包含子表格的网格。这两个网格都有一个复选框列。当我单击上级复选框时,它会自动选中/取消所有子网格复选框。所有复选框都与DB值映射,因此每次更改状态时,它会更改DB中的值,我重新加载网格以更新复选框状态。
问题在于,当我重新加载网格时,我会失去扩展的子网格,这相当令人恼火,因为每次我单击复选框时,它都会重新加载网格...
有没有办法在重新加载网格时保持哪一行被展开的状态?
以下是我的代码的一部分:
$('#jqgSearchTaxPayer').jqGrid({
                        ....
                        subGrid: true,
                        subGridRowExpanded: function (sendSubGrid, lineId) {
                            var sendSubGridId;
                            sendSubGridId = sendSubGrid + "_t";
                            $("#" + sendSubGrid).html("<table id='" + sendSubGridId + "' class='scroll'></table>");

                            $("#" + sendSubGridId).jqGrid({
                                ....

                            { name: 'Keep', index: 'Keep', width: '9px', align: 'center',
                                editable: true, edittype: 'checkbox',
                                formatter: function (cellvalue, options, rowObject) {
                                    cellvalue = cellvalue + "";
                                    cellvalue = cellvalue.toLowerCase();
                                    var bchk = " checked=\"checked\"";
                                    if (cellvalue == "false") {
                                        bchk = "";
                                    }
                                    return "<input type='checkbox' onclick=\"SendLineChecked('" + options.rowId + "','" + sendSubGrid + "');\" " + bchk + " value='" + cellvalue + "' offval='no' />";
                                }, formatoptions: { disabled: false }
                            }],
                                ....

Thanks in advance for your help!

1个回答

3
我发现了一个灵感来自这个帖子的解决方案。
声明一个函数,该函数将获取当前所有已展开的行并触发重新加载。
var scrollPosition = 0;
var ids = [];

function RefreshGridData() {
    var num;
    ids = new Array();
    $("#jqgSearchTaxPayer tr:has(.sgexpanded)").each(function () {
        num = $(this).attr('id');
        ids.push(num);
    });
    $("#jqgSearchTaxPayer").trigger("reloadGrid");
}

在主网格的GridComplete()函数中,解析行集并展开它。
gridComplete: function () {
                             for (var j = 0; j < ids.length; j = j + 1) {
                                 $("#jqgSearchTaxPayer").jqGrid('expandSubGridRow', ids[j]);
                             }
                         },

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接