2011-05-02 39 views
2

我遇到了自動加載樹網格的問題。 目前我有一個只有2層深的結構。jqGrid自動加載Treegrid問題。 。

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: '' 
    }), 
}); 

An Ÿ幫助將不勝感激。 謝謝。 -chris

回答

2

你描述的行爲真的很有趣!問題是子節點「子1」沒有標記爲葉(線<cell>false</cell><cell>1112</cell>是isLeaf值)。因此,在用戶點擊「孩子1」之後,必須顯示其所有孩子。因爲「已加載」列的值未在您的輸入中定義,所以樹狀網格嘗試從服務器加載具有id = 5207的「子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)或添加更多「真實」值的「已裝載」列的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」值,因此它將在加載時展開。

+0

謝謝你的迴應。 我已添加您爲「已加載」建議的附加字段。 因此,在第一次加載時,該字段表示錯誤。點擊父級以擴大字段,然後說真實,但是這以相同的行爲結束。我有父母重複,但與第二例顯示下面的孩子。 另外我不能將第一個孩子標記爲葉,因爲第二個等級也是可擴展的(我的結構是3級深)。 任何想法? – cra 2011-05-03 18:37:25

+0

@cra:您應該在xml文件的所有''元素末尾添加' true'。這意味着所有節點都具有「真實」作爲「加載」屬性。這意味着XML文件包含**完整數據**,並且不應向服務器發送其他請求以檢索子筆記。 – Oleg 2011-05-03 19:04:25

+0

再次感謝您的回覆。 當我將' true'添加到每個節點的末尾時,父節點將不再導致對服務器的另一個請求。這意味着它不會收到孩子信息。我必須在這裏錯過一些東西。 我正在使用Fiddler來查看HTTP請求,並在加載頁面時看到初始請求(和XML響應),然後當然會將根加載爲摺疊狀態。但是,當我單擊根節點以展開和展示其子級時,不會向服務器請求子級信息。我究竟做錯了什麼? – cra 2011-05-03 23:36:21