2012-02-11 1 views
1

jqGridツリーノードは、jsonデータを使用してサーバーから読み込まれます。ノード内をクリックすると、サーバーから子ノードが読み込まれます。 以下のコードは、ページが読み込まれたときに開いたツリーノードを復元するために使用されます。 ツリー内に常に1つのノードのみが開きます。 コントローラはノードidをautoClicked配列にアサートし、gridCompleteはこのパスを使用してノードをオープンします。 これは、複数のサーバー要求が複数回グリッドをグリッド化するため、ページのロード時にグリッドのフラッシングを引き起こします。 グリッドの点滅を無効にするにはどうすればよいですか? 複数のjqGridビルドを防止し、find 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のサーバーに、展開するノードの一覧を含む追加のパラメータを送信します。

サーバーがのすべての要求されたノードを応答に配置する場合。 「拡張された」非表示列の値は、サーバーの応答に直接、または参照したthe answerに記載されている方法でbeforeProcessingコールバックのクライアント側に直接設定することができます(true)。

あなたが必要としているのとまったく同じ結果を得る方法です。不必要な往復を排除するため、グリッドの充填はより迅速になります。 gridview: trueの使用法は、現在のjqGrid実装のツリーグリッドのデフォルトのため、ツリーグリッドのすべての行が「一度に」塗りつぶされるため、点滅が削除されます。

+0

ありがとうございます。これは素晴らしい考えです。 – Andrus

+0

@Andrus:あなたは大歓迎です! – Oleg

関連する問題