2

ツリーグリッドの自動読み込みに問題があります。現在、私はたった2レベルの深さの構造を持っています。

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

どんな助けでも大歓迎です。ありがとう。-クリス

4

1 に答える 1

2

あなたが説明した行動は本当に面白いです!問題は、子ノード「子1」がリーフとしてマークされていないことです<cell>false</cell>(後の行<cell>1112</cell>はisLeaf値です)。したがって、ユーザーが「子1」をクリックした後、そのすべての子を表示する必要があります。「loaded」列の値が入力で定義されていないため、ツリーグリッドはサーバーからid=5207を持つ「Child1」ノードの子をロードしようとします。したがって、追加のパラメータを使用した同じURLへのリクエスト

nodeid = 5207&parentid = 1112&n_level = 1

するつもり。サーバーはパラメーターを無視して同じXMLデータを取得するため、クレイジーな画像が表示されます。

ここに画像の説明を入力してください

(ここのデモを参照してください)。この問題を修正するには、「子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>

次のツリーグリッドを受け取ります

ここに画像の説明を入力してください

(ここのデモを参照)または、「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>

グリッドを受け取ります

ここに画像の説明を入力してください

(ここのデモを参照してください)。何らかの方法で「ロードされた」列に「true」の値を含めることをお勧めします。受け取る追加の利点は、ロード時に任意のノードを拡張できることです。たとえば、前回のデモでは、ルートノードの「expanded」列に「true」の値を設定したため、ロード時に展開されます。

于 2011-05-03T09:22:58.997 に答える