jqGrid自动加载Treegrid问题。 。

时间:2011-05-02 20:52:03

标签: jqgrid tree autoload treegrid

我遇到了自动加载树网格的问题。 目前我的结构只有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: ''
    }),
});

非常感谢任何帮助。 谢谢。 -Chris

1 个答案:

答案 0 :(得分:2)

你描述的行为真的很有趣!问题是子节点“Child 1”未标记为叶<cell>false</cell>之后的行<cell>1112</cell>是isLeaf值)。因此,在用户点击“Child 1”后,必须显示其所有子项。由于未在输入中定义“已加载”列的值,因此树网格尝试从服务器加载具有id = 5207的“子1”节点的子节点。所以请求带有附加参数的相同网址

  

NODEID = 5207&安培; parentId的= 1112&安培; n_level = 1

将完成。因为您的服务器只是忽略参数并获得相同的XML数据,所以可以看到疯狂的图片

enter image description here

(参见演示here)。 要解决此问题,您应该将“Child 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文件中为“加载”列添加“true”值的其他数据:

<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>

并接收网格

enter image description here

(参见演示here)。我建议您以任何方式为“已加载”列包含“true”值。您收到的另一个好处是,您可以在加载时扩展任何节点。例如,在最后一个演示中,我在根节点的“扩展”列中设置了“true”值,因此它将在加载时展开。