如何在C#中快速实现数据库树形结构 http://www.aspxcn.com/dotnetbbs/View.aspx?fbId=23&Id=57150

解决方案 »

  1.   

    private void CreateTree()
    {  
    string sqltxt="Persist Security Info=False;User ID=sa;Initial Catalog=zhongtian;Data Source=ytf;Password=xu;";
    SqlConnection sqlcon=new SqlConnection(sqltxt);
      
    SqlCommand sqlcom=new SqlCommand("Select * from product_class where fatherid='0'",sqlcon);
    try
    {
    sqlcon.Open();
    SqlDataReader sqlreader=sqlcom.ExecuteReader();
    while(sqlreader.Read())
    {
    TreeNode mynode=new TreeNode();
    mynode.Text=sqlreader.GetString(2);
    mynode.Tag=sqlreader.GetValue(1).ToString()+'|'+sqlreader.GetValue(2).ToString()+'|'+sqlreader.GetValue(3).ToString()+'|'+sqlreader.GetValue(0).ToString();
    treeView1.Nodes.Add(mynode);

    NextTree(sqlreader.GetValue(0).ToString(),treeView1.Nodes[0]);
    }
    }
    catch(Exception ex)
    {
    MessageBox.Show(ex.ToString());
    }
    finally
    {
    sqlcon.Close();
    }
    } private void NextTree(string nodeid,TreeNode parentnode)
    {
    string sqltxt="Persist Security Info=False;User ID=sa;Initial Catalog=zhongtian;Data Source=ytf;Password=xu;";
    SqlConnection sqlcon=new SqlConnection(sqltxt);
      
    SqlCommand sqlcom=new SqlCommand("Select * from product_class where fatherid='"+ nodeid +"'",sqlcon);
    try
    {
    sqlcon.Open();
    SqlDataReader sqlreader=sqlcom.ExecuteReader();

    while(sqlreader.Read())
    {
    TreeNode mynode=new TreeNode(sqlreader.GetString(2));
    parentnode.Nodes.Add(mynode);
    mynode.Tag=sqlreader.GetValue(1).ToString()+'|'+sqlreader.GetValue(2).ToString()+'|'+sqlreader.GetValue(3).ToString()+'|'+sqlreader.GetValue(0).ToString();
    NextTree(sqlreader.GetValue(0).ToString(),mynode);

    }

    }
    catch(Exception ex)
    {
    MessageBox.Show(ex.ToString());
    }
    finally
    {
    sqlcon.Close();
    }
               
    }
      

  2.   

    public void CreateNodesOfParent(string iParent,TreeNode pNode) 
    {


    DataView dvwData = new DataView(this.dt.Tables[0]);
    if (iParent == null)
    {
    dvwData.RowFilter =  "[ParentID] is null";
    }
    else
    {
    dvwData.RowFilter =  "[ParentID] = " +"'"+ iParent+"'";
    }


    foreach(DataRowView Row in dvwData) 
    {
    // Call Stack !
    if(pNode == null) 
    {
    TreeNode zNode = this.treeView1.Nodes.Add(Row["DeptName"].ToString());
    zNode.Tag = Row["DeptID"].ToString();
    CreateNodesOfParent((Row["DeptID"].ToString()),zNode);

    else 
    {
    TreeNode zNode =  pNode.Nodes.Add(Row["DeptName"].ToString());
    zNode.Tag = Row["DeptID"].ToString();
    CreateNodesOfParent((Row["DeptID"].ToString()),zNode);
    }

    }
    }
    public void IniTree()
    {
    this.treeView1.BeginUpdate();
    CreateNodesOfParent(null,null);
    this.treeView1.ExpandAll();
    this.treeView1.EndUpdate();
    }
      

  3.   

    生成树,初始的parentid为0,表结构:id,parentid,name
    public void InitTree(TreeNodeCollection  Nds,string parentId,DataTable dt)
    {   
            dv=new DataView();
    TreeNode  tmpNd;
    string intId;
    dv.Table=dt;
    dv.RowFilter="ParentId="  + parentId ;
    foreach(DataRowView drv in dv)
    {   
                    tmpNd=new TreeNode();
    tmpNd.Tag =drv[0].ToString();  
    tmpNd.Text=drv[2].ToString();   
    Nds.Add(tmpNd);
    intId=drv[1].ToString();       
    InitTree(tmpNd.Nodes,tmpNd.Tag.ToString(),dt);
    }
    }
    树的遍历:
    public void GetAllNodeText(TreeNodeCollection tnc,string txt)
    {  
    foreach (TreeNode node in tnc)
    {
    if( node.Nodes.Count != 0 )
    GetAllNodeText(node.Nodes,txt);
    }
    }
    这个问题论坛里有好多,搜索下看看吧