2012-02-11 2 views
1

Узлы дерева jqGrid считываются с сервера с использованием данных json. Щелчок в узле считывает дочерние узлы с сервера. Код ниже используется для восстановления открытого узла дерева, если страница загружена. Только один узел открывается всегда в дереве. Идентификаторы узлов контроллера для автоматического набора и gridComplete открывает узлы, используя этот путь. Это приводит к сглаживанию сетки при загрузке страницы, поскольку несколько запросов на сервер несколько раз повторяют сетку. Как отключить мигание сетки? Можно ли предотвратить множественное построение jqGrid и показать только дерево 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; 
     } 
    } 
      ); 
}); 

контроллер:

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

ответ

2

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

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

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

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

+0

большое спасибо. Это отличная идея. – Andrus

+0

@ Andrus: Добро пожаловать! – Oleg

Смежные вопросы