网上很多,搜一下,或到ASPCN有个简单例子

解决方案 »

  1.   

    id   parent (两个字段)
    当parent 为空时就是根结点.然后用递归的方式给每个根结点找子结点.很简单的哦
      

  2.   

    我是这样实现的:
          我的数据库使用ACCESS 
          
          在数据库中有两个表,一个是代码表,一个代码类别表:
          代码表的结构:
                 
                 ID:      编号
                 Name:    名字
                 Categorized:代码的类别
                 
          代码类别表的结构:
                  ID:  编号
                  Name:名字
                  Parent:上层类      主要采用类似递归的方法:
          还有使用到TAG 属性,用来记录点的一些必要的信息,
          以下是代码,决绝了问题记得给我分。
          
          public void LoadData()
    {
                treeView1.Nodes.Clear (); string SqlCate="SELECT [ID],[Name],[Parent] FROM[Categorized] ORDER BY [Parent],[ID]";
                
    mDs=Oper.GetResults(SqlCate);
                
    string SqlCode="SELECT [ID],[Title],[Categorized] FROM [Code] ORDER BY [ID]";
                
                mCodeDs=Oper.GetResults (SqlCode);
                
    AddNoteOfParent(-1,null);
                
    }
            
    private void AddNoteOfParent(int IdParent,TreeNode PNode)
    {
                
                DataView dv=new DataView ( mDs.Tables [0]);

    dv.RowFilter ="[Parent]=" +IdParent;
                
    foreach(DataRowView rv in dv )
    {   
    if (PNode==null)
    {
                        TreeNode tn=new TreeNode (rv["Name"].ToString());
    treeView1.Nodes.Add (tn);
                        AddNoteOfParent(int.Parse (rv["ID"].ToString ()),tn);
    AddCodeNode(int.Parse (rv["ID"].ToString ()),tn);
    }
    else
    {
                        TreeNode tn=new TreeNode (rv["Name"].ToString ());
    PNode.Nodes.Add (tn);
    CNodeItem ni=new CNodeItem ();

    ni.ID =int.Parse (rv["ID"].ToString ());
    ni.ItemType=NodeItemType.Categorize ;
                        tn.Tag =ni;
                        
    AddNoteOfParent(int.Parse (rv["ID"].ToString ()),tn);
    AddCodeNode(int.Parse (rv["ID"].ToString ()),tn);
    }
    }
    }
            
    private void AddCodeNode(int IdParent,TreeNode PNode)
    {
                 DataView codedv=new DataView ( mCodeDs.Tables [0]);
     codedv.RowFilter ="[Categorized]=" + IdParent.ToString ();
    foreach(DataRowView rv in codedv)
    {
    TreeNode tn=new TreeNode (rv["Title"].ToString ());
                    
    CNodeItem ni=new CNodeItem ();

    ni.ID =int.Parse (rv["ID"].ToString ());
    ni.ItemType =NodeItemType.Code ;
                    
                    tn.Tag=ni; PNode.Nodes.Add (tn);
    }
    }
            
    private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
    {
                
    TreeNode tn=treeView1.SelectedNode ;
    if (tn.Tag==null) return; 

    CNodeItem ni=(CNodeItem) tn.Tag ;
    string SqlStr=""; if (ni.ItemType !=NodeItemType.Categorize )
    {
    SqlStr="SELECT * FROM [Code] WHERE [ID]=" +ni.ID.ToString ();
                    
    DataSet ds=Oper.GetResults (SqlStr); 
    DataTable dt=ds.Tables [0];
                    
    if (dt.Rows.Count ==1)
    {
                        
    DataRow dr=dt.Rows [0];
    labTitle.Text ="标题:"+tn.Text ;
    txtNote.Text =dr["Note"].ToString ();
    txtCode.Text =dr["Content"].ToString ();
                        
    mCurrentCode.Title =dr["Title"].ToString ();
    mCurrentCode.Categorized =int.Parse (dr["Categorized"].ToString ());
    mCurrentCode.Content =dr["Content"].ToString ();
    mCurrentCode.KeyWord =dr["Keyword"].ToString ();
    mCurrentCode.Note =dr["Note"].ToString ();
    mCurrentCode.Relationship =dr["Relationship"].ToString ();
                        
    }
    }
                
    else
    {
                    
                    SqlStr="SELECT * FROM [Categorized] WHERE [ID]=" +ni.ID.ToString ();
    DataSet ds=Oper.GetResults (SqlStr); 
    DataTable dt=ds.Tables [0];
                    
    if (dt.Rows.Count ==1)
    {
        
    DataRow dr=dt.Rows [0];
    mCurrentCate.Id =int.Parse (dr["ID"].ToString ());
    mCurrentCate.Name =dr["Name"].ToString ();
    mCurrentCate.Note =dr["Note"].ToString ();
    mCurrentCate.Parent =int.Parse (dr["Parent"].ToString ());
        
    }//end if
                    
    }//end if 
                

                
    }