我们目前正在尝试将jqGrid treegrid自动扩展到树的第3级,以便所有子项都可见。当前数据集是数千或行深,我们被迫在请求扩展时动态加载每个节点,这需要重新加载网格。扩展节点ID作为已保存的树状态保存在数组中,以便在重新显示树时可以重新展开节点。这会在扩展发生时从数据库加载每个节点。 AS每个节点都是动态加载和扩展的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做什么?如果是这样,我们如何知道树木扩张何时真正完成,我们可以重申已经消耗的网格来开始扩展下一级父母?