2012-02-11 3 views
1

jqGrid 트리 노드는 json 데이터를 사용하여 서버에서 읽습니다. 노드를 클릭하면 서버에서 자식 노드를 읽습니다. 아래 코드는 페이지가로드 될 때 열린 트리 노드를 복원하는 데 사용됩니다. 단일 노드 만 항상 트리로 열립니다. 컨트롤러는 노드 id를 autoClicked 배열에 할당하고 gridComplete는이 경로를 사용하여 노드를 엽니 다. 이로 인해 여러 서버 요청 buid 그리드가 여러 번 발생하므로 페이지로드시 그리드가 flasing됩니다. 그리드 깜박임을 비활성화하는 방법은 무엇입니까? 여러 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으로 설정할 수 있습니다.

그런 식으로 원하는 결과를 얻을 수 있습니다. 불필요한 왕복을 없애고 그리드를 채우는 것이 더 빠를 것입니다. jqGrid의 현재 구현에서 트리 그리드의 기본값 인 gridview: true의 사용으로 인해 트리 그리드의 모든 행이 "즉시"채워 지므로 깜박임이 제거됩니다.

+0

대단히 감사합니다. 이것은 좋은 생각입니다. – Andrus

+0

@Andrus : 천만에요! – Oleg

관련 문제