2011-09-15 12 views
1

私は現在、データ関数をオーバーライドしてデータを埋めるためにリサイクルサービスを呼び出す場所にツリーグリッドを作成しています。アイデアは、親ノードのみをロードし、ノードが展開されたときに動的にスリフトサービスを呼び出してデータを入力することです。私は、子を動的にロードしようとすると、ツリーグリッドが動作している方法でいくつかの欠点にぶつかりました。最初のリストをうまく読み込めますが、動的に子をロードすると、親が展開されたときに子が追加されません。今すぐ2番目のエントリを展開すると、正しい位置のリストに子が追加されますが、それは287の子として見えません。jqGrid(v4.1.2)treegrid addChildNodesグリッドに正しくエントリを追加しません。

私はそれに間違っていることを把握していないようですそれは子供として正しく追加したくないということです。

// 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に渡された場合に正常に機能します。どんな助けもありがとう。

答えて

0

私も同様の問題があります。ツリーノードをドロップすると、AddChildNodeを使って子ノードを追加します。正しく動作していません。親(ドロップされた行)と子(オンドロップイベントの追加された行)の間の関係は機能していません。回避策として、削除された行を削除し、親ノードと子ノードを追加します。

-1
var orgExpandNode = $.fn.jqGrid.expandNode, 
    orgCollapseNode = $.fn.jqGrid.collapseNode; 

    $.jgrid.extend({ 
     expandNode : function(rc) { 
      if(this.getNodeChildren(rc).length===0){ 
      $.ajax({  
       url : "http://localhost:8080/xx/", 

       success : function(data) {      
       var result = data;     
       for(var i=0;i<result.length;i++){      
          grid.addChildNode(result[i].id,result[i].parent,result[i]); 
       } 
       result=[]; 
        } 
      }); 
      } 
      return orgExpandNode.call(this, rc); 
     }, 
    }); 
関連する問題