jqGrid(v4.1.2)treegrid addChildNodes没有正确地向网格添加条目

时间:2011-09-15 16:48:44

标签: jquery json jqgrid thrift treegrid

我正在努力让一个treegrid进入我重写数据函数的地方,调用thrift服务来填充数据。我的想法是,我只加载父节点,然后当节点扩展时,它将动态调用thrift服务来填充数据。当我尝试动态加载子项时,我遇到了一些关于treegrid表现方式的怪癖。它会加载初始列表,但是当我动态加载子进程时,它不会在扩展父进程时添加它。现在,如果展开第二个条目,它会将子项添加到列表中的正确位置,但它不会将其视为287的子项。

我似乎无法理解我做错了什么,因为它不想像孩子那样正确地添加。

// The data that is returned via thrift to fill in the initial entry in the table

{
"total" : "13″,
"page":"1″,
"records": "720″,
"rows" : [

{"id" : "287","cell" : ["287","MDXX00025",true,0,null,false,false] }
,{"id" : "544″,"isLeaf":true,"cell" : ["544","MDXX00460",true,0,null,false,false] }]
}

 // How jqGrid is configured with a oData object that contains the child I want to fill in.

var oData = { "rows" : [
{"id" : "7220","parent":287,"level":"1","isLeaf":true,"loaded":true,"empty":"MDXX00450" }]
};

function DoWork(postdata)
{
     var sData = client.NavigateTable(postdata._search,postdata.page,postdata.rows,postdata.sidx,

            postdata.sord,postdata.totalrows);
     var obj = jQuery.parseJSON(sData);
     var thegrid = jQuery("#addtree")[0];
     thegrid.addJSONData(obj);
}

function DoTreeWork(postdata)
{
     var thegrid = $("#addtree");
     thegrid.jqGrid ('addChildNode', oData.rows[0].id, oData.rows[0].parent, oData.rows[0]);
}

jQuery(document).ready(function(){

    $.jgrid.defaults = $.extend($.jgrid.defaults,{loadui:"enable"});
    jQuery("#addtree").jqGrid({
    datatype: function(postdata)
    {
        DoWork(postdata);
    },
    treedatatype: function (postdata)
    {
        DoTreeWork(postdata);
    },
    treeGrid: true,
    treeGridModel: 'adjacency',
       colNames:["id","empty","docno,"],
       colModel:[
        {name:'id',index:'id', width:20,key:true, editable:false},
        {name:'empty',index:'empty',width:10},
           {name:'docno',index:'docno', width:30, editable:true}
       ],
    pager : "#paddtree",
    treeGrid: true,
    ExpandColumn : 'name',
    editurl:'server.asp',
    viewrecords: true,
    autowidth: true,
    height:'400',
    rowNum:52,
    rowTotal:100,
    gridview: true,
    sortorder: "asc",
    sortname: 'id',
    caption: "Grid"
});
jQuery("#addtree").jqGrid('navGrid',"#paddtree",{edit:true,add:false,del:true,search:false});
});

我还注意到传入addJSONData的相同数据不适用于addChildNode。我不确定这是设计还是监督。如果所有数据(父元素和子元素)在开始时一次传递给addJSONData,则整个示例运行良好。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

我有类似的问题。当我删除一个树节点时,我使用AddChildNode向它添加子节点。但它不能正常工作。父(删除行)和子(在ondrop事件中添加的行)之间的关系不起作用。作为变通方法的解决方案,您可以删除已删除的行并添加父节点和子节点。

答案 1 :(得分:-1)

for