给我个邮箱,我给你一个用C#实现的树,可以直接从数据库中取数生成树。太晚了就给我发邮件。[email protected]

解决方案 »

  1.   

    public void InitTree(TreeNodeCollection  Nds,string parentId,DataSet ds,string TableName)
    {   //从根节点开始递归调用显示子树 
    dv=new DataView();
    TreeNode  tmpNd;
    string intId;
    dv.Table=ds.Tables[TableName];
    dv.RowFilter="ParentId="  + parentId ;
    foreach(DataRowView drv in dv)
    {   //递归算法从这里开始,主要思想是深度遍历。
    tmpNd=new TreeNode();
    tmpNd.Tag =drv[0].ToString();  //节点ID
    tmpNd.Text=drv[2].ToString();  //节点名称
    Nds.Add(tmpNd);
    intId=drv[1].ToString();       //节点的父节点
    InitTree(tmpNd.Nodes,tmpNd.Tag.ToString(),ds,TableName);
    }
    }
    树的结构就你的那样就可以了
      

  2.   

    这样子的递归错在哪里?能把结点加入每0层。但进不了后面几层。好像是函数错了。
    root[i].GetNodeCount(true)>0这样能判断该结点有子结点吗?private void button1_Click(object sender, System.EventArgs e)
    {
    TreeNode leaf=new TreeNode(textBox1.Text);
    leaf.Tag=textBox2.Text;
    treeView1.BeginUpdate();
    addsub(treeView1.Nodes,leaf);
    treeView1.EndUpdate();
    } public void addsub(TreeNodeCollection root,TreeNode leaf)
    {string text;
    for(int i=0;i<root.Count;i++)
    {
    text=root[i].Text;
    if(root[i].GetNodeCount(true)>0)
    addsub(root[i].FirstNode.Nodes,leaf);
    else if(text==leaf.Tag.ToString())
    root[i].Nodes.Add (leaf);
    }
    }
      

  3.   

    这样子就可以了。:)
    private void button1_Click(object sender, System.EventArgs e)
    {
    TreeNode leaf=new TreeNode(textBox1.Text);
    leaf.Tag=textBox2.Text;
    treeView1.BeginUpdate();
    addsub(treeView1.Nodes,leaf);
    treeView1.EndUpdate();
    } public void addsub(TreeNodeCollection root,TreeNode leaf)
    {//string text;
    for(int i=0;i<root.Count;i++)
    {
    //text=root[i].Text;
    if(root[i].GetNodeCount(true)>0)
    //addsub(root[i].FirstNode.Nodes,leaf);
    addsub(root[i].Nodes,leaf); else if(root[i].Text==leaf.Tag.ToString())
    root[i].Nodes.Add (leaf);
    }
    }