c# - 如何删除持续远程填充的 jqgrid 树节点上的闪烁

标签 c# javascript asp.net asp.net-mvc-2 jqgrid

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

回答 Send expanded TreeGrid Nodes in cookie 仅适用于完全填充的网格。

var autoClicked=[<%= Model.Path() %>];
$(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: '<%= ResolveUrl("~/Store/GridData")%>',
        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;
        }
    }
            );
});

Controller :

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

最佳答案

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

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

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

以这种方式,您将获得与您需要的完全相同的结果。由于消除了不必要的往返,网格的填充将更快。由于使用 gridview: true,树形网格中的所有行将“立即”填充,因此将删除闪烁。这是当前 jqGrid 实现中 Tree Grids 的默认值。

关于c# - 如何删除持续远程填充的 jqgrid 树节点上的闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9242601/

相关文章:

c# attribute over main 属性

javascript - Cherrypy和JS,找不到图像

javascript - Handlebar.helper 的 View 无法使用 Controller 中的操作

c# - 如何在没有 HTML 标签的情况下从数据库中获取数据?

c# - 将日期格式解析为 DateTime c#

c# - 如何为每个循环创建新的 div

c# - 在 OnServerValidate 方法中获取源代码管理

c# - 二进制列表的 LINQ 三元结果

c# - 如何确定页面何时在 csharp 的 webbrowser 控件中完全加载?

javascript - 通过查询仅删除一个 div