2011-05-02 6 views
2

자동 트리 그리드에 문제가 있습니다. 현재 2 레벨 밖에없는 구조입니다. jqGrid 자동 로딩 트리 그리드 문제. .

1 
    a 
    b 
    c 
2 
    a 

내가 노드를 확장합니다

는 그리드 중 하위 노드 (들)을 선택한 루트 노드를 기반으로 표시되어 있어야로 다시뿐만 아니라 루트 노드의 다른 인스턴스를 추가 할 것으로 보인다. 여기
1 
1 
    a 
    b 
    c 

루트 노드를 선택하기 전에 XML을 살펴입니다 :

<?xml version="1.0" encoding="UTF-8"?> 
<rows> 
    <page>1</page> 
    <total>1</total> 
    <records>1</records> 
    <row> 
     <cell>1112</cell> 
     <cell>Parent 1</cell> 
     <cell>0</cell> 
     <cell>NULL</cell> 
     <cell>false</cell> 
     <cell>false</cell> 
    </row> 
</rows> 

을 그리고 여기에 루트 노드를 선택한 후 XML을 살펴입니다 : 또한

<?xml version="1.0" encoding="UTF-8"?> 
<rows> 
    <page>1</page> 
    <total>1</total> 
    <records>1</records> 
    <row> 
     <cell>1112</cell> 
     <cell>Parent 1</cell> 
     <cell>0</cell> 
     <cell>NULL</cell> 
     <cell>false</cell> 
     <cell>false</cell> 
    </row> 
    <row> 
     <cell>5207</cell> 
     <cell>Child 1</cell> 
     <cell>1</cell> 
     <cell>1112</cell> 
     <cell>false</cell> 
     <cell>false</cell> 
    </row> 
</rows> 

을, 여기에 내 설정 :

$(document).ready(function(){ 
    $("#gReport").jqGrid({ 
     treeGrid: true, 
     treeGridModel: 'adjacency', 
     ExpandColumn: 'company', 
     url: document.forms['frmReport'].elements['gaddr'].value, 
     datatype: 'xml', 
     mtype: 'GET', 
     colNames: ["ID", "Company"], 
     colModel: [ 
      {name: 'id', index: 'id', width: 1, hidden: true, key: true}, 
      {name: 'company', index: 'company', width: 40, hidden: false, sortable: true} 
     ], 
     rowNum: -1, 
     width: 980, 
     height: 'auto', 
     pager: false, 
     caption: '' 
    }), 
}); 

도움이 크게 감사 할 것입니다. 감사합니다. . -chris

답변

2

당신이 묘사 한 행동은 정말 재미 있습니다! 문제는 하위 노드 "하위 1"이 리프 (이 isLeaf 값인 후 <cell>false</cell>)으로 표시되어 있지 않다는 것입니다. 따라서 사용자가 "Child 1"을 클릭하면 모든 자식이 표시되어야합니다. "로드 된"열의 값이 입력에 정의되어 있지 않으므로 트리 그리드는 서버에서 id = 5207 인 "Child 1"노드의 자식을로드하려고 시도합니다. 그래서 추가 매개 변수와 동일한 URL에 대한 요청

nodeid가 = 5207 & parentid = 1112 & n_level = 1

이 수행됩니다. 서버가 단지 매개 변수를 무시하고 다시 같은 XML 데이터를 얻을 수 있기 때문에 하나가 미친 그림

enter image description here

(데모 here 참조를) 참조하십시오. 당신이 잎으로 "자녀 1"노드를 표시해야 하나 문제를 해결하려면 :

<row> 
    <cell>5207</cell> 
    <cell>Child 1</cell> 
    <cell>1</cell> 
    <cell>1112</cell> 
    <cell>true</cell> <!-- here the "false" was changed to "true" --> 
    <cell>false</cell> 
</row> 

을 다음과 같은 트리 그리드

enter image description here

을 받게을 (데모 here 참조) 또는 추가 추가 "true"값을 갖는 "loaded"열에 대한 XML 파일의 데이터는 다음과 같습니다.

<row> 
    <cell>1112</cell> 
    <cell>Parent 1</cell> 
    <cell>0</cell> 
    <cell>NULL</cell> 
    <cell>false</cell> <!-- is leaf --> 
    <cell>true</cell> <!-- should be expanded --> 
    <cell>true</cell> <!-- is loaded --> 
</row> 
<row> 
    <cell>5207</cell> 
    <cell>Child 1</cell> 
    <cell>1</cell> 
    <cell>1112</cell> 
    <cell>false</cell> <!-- is leaf --> 
    <cell>false</cell> <!-- should be expanded --> 
    <cell>true</cell> <!-- is loaded --> 
</row> 

D

enter image description here

(데모 here 참조). 어떤 식 으로든 "로드 된"열에 "true"값을 포함 시키도록 권장합니다.추가 이점으로는 노드 로드시에 확장 할 수 있습니다. 예를 들어 마지막 데모에서는 루트 노드의 "확장 된"열에 "true"값을 설정하므로로드 할 때 확장됩니다.

+0

답변 해 주셔서 감사합니다. "로드 됨"에 대해 제안한 추가 필드를 추가했습니다. 따라서 첫 번째로드시 필드에 false가 표시됩니다. 입력란을 확장하기 위해 부모를 클릭하면 true가 표시되지만 동일한 동작으로 끝납니다. 나는 부모를 되풀이하지만 두 번째 인스턴스는 밑에있는 아이를 보여줍니다. 또한 첫 번째 자식을 리프로 표시 할 수 없습니다. 그 두 번째 수준은 확장 가능하기 때문에 (내 구조는 3 단계입니다). 아이디어가 있으십니까? – cra

+0

@cra : xml 파일의 모든 ''요소 끝에 ' true'을 그냥 추가해야합니다. 이것은 모든 노드가 "true"를 "loaded"속성으로 가지고 있음을 의미합니다. 이는 XML 파일에 ** 전체 데이터 **가 포함되어 있으며 서버에 대한 추가 요청이 하위 노트를 검색하기 위해 보내야한다는 것을 의미합니다. – Oleg

+0

답변 해 주셔서 다시 한 번 감사드립니다. 각 노드의 끝에 ' true'를 추가하면 더 이상 부모 노드가 서버에 다른 요청을하지 않습니다. 다시 아동 정보를받지 못한다는 의미입니다. 여기에 뭔가 빠져 있어야합니다. HTTP 요청을보기 위해 Fiddler를 사용 중이며 페이지가로드 될 때 초기 요청 (및 XML 응답)이 표시되고 물론 루트가 접힌 상태로로드됩니다. 그러나 루트 노드를 클릭하여 확장하고 자식 노드를 노출하면 자식 정보에 대한 서버에 대한 요청이 이루어지지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? – cra