如何删除持久化远程填充的jqgrid树节点上的闪烁

使用json数据从服务器读取jqGrid树节点。 单击节点从服务器读取子节点。 如果加载页面,下面的代码用于恢复打开的树节点。 始终只在树中打开单个节点。 Controller将节点ID分配给autoClicked数组,gridComplete使用此路径打开节点。 由于多个服务器多次请求建立网格,这会导致网页加载页面加载。 如何禁用网格闪烁? 是否可以防止多个jqGrid构建并显示只找到jqGrid树?

在Cookie中发送扩展的TreeGrid节点中的答案仅适用于完全填充的网格。

var autoClicked=[]; $(function () { var grid = $("#tree-grid"); grid.jqGrid({ gridComplete: function () { setTimeout(function () { var id = autoClicked.shift(); var rData = grid.getGridParam('data'); var data = null; for (var i = 0; i < rData.length; i++) { if (id == rData[i].id) { data = rData[i]; break; } } if (data == null) return; grid.expandRow(data); grid.expandNode(data); }, 0); }, url: '', datatype: "json", mtype: "POST", height: "auto", loadui: "disable", treeGridModel: "adjacency", colModel: [ { name: "id", width: 1, hidden: true, key: true }, { name: "menu", classes: "handcursor" }, { name: "url", width: 1, hidden: true } ], autowidth: true, treeGrid: true, ExpandColumn: "menu", rowNum: 200, ExpandColClick: true, onSelectRow: function (rowid) { var treedata = grid.jqGrid('getRowData', rowid); window.location = treedata.url; } } ); }); 

控制器:

  public string Path() { Artomlii node = Artomliik; string res = node.Artomaliik.ToString(); while (!Core.IsNullOrWhiteSpace(node.Treeparent)) { // retrieve parent node node = MyDataContext.ExecQuery(@"select * from artomlii where treeorder={0}", node.Treeparent).FirstOrDefault(); if (node == null) break; res = node.Artomaliik.ToString() + "," + res; } return res; } 

在你的位置,我会以另一种方式解决问题。

我将在postData向服务器发送一个附加参数,其中包含应扩展的节点列表。

在这种情况下,服务器将所有请求的节点放在响应中。 “扩展”隐藏列的值可以直接在服务器响应中设置为true也可以在beforeProcessing回调中的客户端设置为true ,这与我在您引用的答案中描述的方式相同。

这样你就可以获得完全相同的结果。 由于消除了不必要的往返行程,电网的填充将更快。 闪存将被删除,因为树形网格中的所有行都将“立即”填充,因为使用了gridview: true ,这是当前jqGrid实现中Tree Grids的默认值。