书中例子:显示数状图调用下面的递归:
我有点不明白:第一次调用InitTree时,假设DataRow  [] rows =... 有二个以上的值,然后执行到InitTree时,再调用InitTree,再执行DataRow [] rows ...不是把第一次的数据的结构覆盖了吗,这样第一次的第一条数据后面的记录就执行不下去了,看不懂,望高手指教,难道每次DataRow [] rows 的都是新的不覆盖吗 // 从DataSet中取数据建树
// 从根节点开始递归调用显示子树
private void InitTree(TreeNodeCollection Nds,string parentId)
{
TreeNode tmpNd;
DataRow [] rows = data.Tables[0].Select("ParentId='" + parentId + "'"); foreach(DataRow row in rows)
{
tmpNd = new TreeNode();
tmpNd.ID = row["NodeId"].ToString();
tmpNd.Text = row["NodeName"].ToString();
tmpNd.NavigateUrl = row["Url"].ToString();
Nds.Add(tmpNd);
InitTree(tmpNd.Nodes, tmpNd.ID);
}
}

解决方案 »

  1.   

      下面是我用delphi 写的显示树状图的代码,只能显示一个部门,不知那里错了:
      qryexec(qry1,'select * from bumen order by bmm');
      TreeView1.Items.Clear ;  //TreeView1是中文,TreeView2是ID,隐藏的
      TreeView2.Items.Clear ;
      inittree(qry1,TreeView1,TreeView2,0,true);procedure inittree(qry:tadoquery;treeview:ttreeview;treeview1:ttreeview;parentid:integer;isExpanded:boolean);
    var i:integer;
      MyTreeNode,MyTreeNode1: TTreeNode;
      tmpqry:tadoquery;
      abc:string;
    begin
     if parentid=0 then
     begin
        MyTreeNode:=treeview.Items.Add(nil,'所有部门');
        MyTreeNode.SelectedIndex :=1;
        MyTreeNode1:=treeview1.Items.Add(nil,'id部门');
        MyTreeNode1.SelectedIndex :=1;
     end;
      tmpqry:=tadoquery.Create(nil);
      tmpqry:=qry;
      tmpqry.Filter:='dirid='''+inttostr(parentid)+'''';
      tmpqry.Filtered:=true;
      tmpqry.first;
      while not tmpqry.Eof do
      begin
       MyTreeNode:=treeview.Items.AddChild(MyTreeNode,tmpqry.fieldbyname('bm').asstring);
       MyTreeNode1:=treeview1.Items.AddChild(MyTreeNode1,tmpqry.fieldbyname('id').asstring);
       MyTreeNode.SelectedIndex:=1;
       MyTreeNode1.SelectedIndex:=1;
       inittree(tmpqry,treeview,treeview1,tmpqry.fieldbyname('id').AsInteger ,true);
       tmpqry.Next;
     end;
    end;
      

  2.   

    注意这句
    InitTree(tmpNd.Nodes, tmpNd.ID);传的参数应该是下一层结点