Как убрать перепрошивку на сохраняющемся удаленно заполненном узле дерева jqgrid - PullRequest
1 голос
/ 11 февраля 2012

Узлы дерева jqGrid читаются с сервера с использованием данных json. Щелчок в узле читает дочерние узлы с сервера. Код ниже используется для восстановления открытого узла дерева, если страница загружена. Только один узел всегда открыт в дереве. Контроллер присваивает идентификаторы узлов массиву autoClicked, а gridComplete открывает узлы, используя этот путь. Это вызывает смещение сетки при загрузке страницы, так как несколько запросов к серверу строят сетку несколько раз. Как отключить мигание сетки? Можно ли предотвратить множественное построение jqGrid и показывать только дерево jqGrid?

Ответить в Отправка расширенных узлов TreeGrid в 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;
        }
    }
            );
});

Контроллер:

    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;
    }

1 Ответ

2 голосов
/ 12 февраля 2012

На вашем месте я бы решил проблему по-другому.

Я бы отправил на сервер в postData дополнительный параметр, который содержит список узлов, которые должны быть расширены.

В случае, если сервер поместит все запрошенные узлы в ответ. Значение «расширенного» скрытого столбца можно установить равным true либо непосредственно в ответе сервера, либо на стороне клиента в обратном вызове beforeProcessing способом, который я описал в ответе , на который вы ссылались ,

В том смысле, что вы получили бы точно такие же результаты, которые вам нужны. Заполнение сетки будет происходить быстрее из-за устранения ненужных круговых рейсов. Перепрошивка будет удалена, потому что все строки в сетке дерева будут заполнены "сразу" из-за использования gridview: true, которое по умолчанию для сеток деревьев в текущей реализации jqGrid.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...