2

我们目前很难尝试将 jqGrid treegrid 自动扩展到树的第 3 级,以便所有子级都可见。当前数据集有数千或行深,我们被迫在请求扩展时动态加载每个节点,这需要重新加载网格。展开的节点 id 作为保存的树状态保存在数组中,以便在重新显示树时可以重新展开节点。当扩展发生时,这会经历从数据库加载每个节点的过程。因为每个节点都是动态加载和扩展的,gridComplete 和 loadComplete 事件按预期处理。

我们试图通过利用保存树状态和现有逻辑在现有逻辑中适当地分解树来触发第 3 级扩展。我们遇到的问题是树不能足够快地扩展以进行处理,而且我们永远无法将树完全分开。

这是遍历父项以捕获要扩展的适当 id 的函数:

function ExpandGridLevel(level) {
        if (ExpandGridLevels == false) {
            ExpandTotalLevels = level; 
            ExpandLevelCurrent = 0;
            ExpandGridLevels = true;
        }

        if (!TreeExpandState) {
            TreeExpandState = new Array();
        }
        $(".treeclick", "#Grid").each(function () {
            if ($(this).hasClass("tree-plus")) {
                var id = $(this).parents("tr").attr("id");
                var rowLevel = $("#MaGrid").getLocalRow(id);
                if (rowLevel.level ==  ExpandLevelCurrent) {
                    TreeExpandState.push(id);
                    $(this).removeClass("tree-plus");
                    $(this).addClass("tree-minus");
                }
            }
        });


        $(this).trigger("reloadGrid");
        $("#Grid").jqGrid("setGridParam", { datatype: "local" });

        ExpandLevelCurrent++;
        RefreshGrid();
    }

我们的 gridComplete 和 loadComplete 部分代码:

loadComplete: function (data) {                
                $("#Grid").jqGrid("setGridParam", { datatype: "local" });

                if (TreeExpandState.length == 0) {
                          setTimeout(function () { ExpandGridLevel (ExpandTotalLevels); }, 3000);
                }
}

gridComplete: function () {
                if (TreeExpandState) {

                    var rowId =  TreeExpandState.shift();
                    ExpandNode(rowId);
                }
 }

我们试图用 jqGrid 做的事情是可能的吗?如果是这样,我们如何知道树扩展何时真正完成,并且我们可以在扩展的网格上重复以开始下一级父级的扩展?

4

0 回答 0