public void BindCategoryTreeVew(TreeView treeview, bool isExpanded, string sSelectedData) 
    { 
        ConStr = System.Configuration.ConfigurationManager.ConnectionStrings["Equip_ConnectionString"].ToString(); 
        
        OleDbConnection myConnection = new OleDbConnection(ConStr); 
        string sql = "select TYPE_ID,TYPE_PID,name from IT_ASSETS_TYPE"; 
        System.Data.OleDb.OleDbDataAdapter Da = new OleDbDataAdapter(sql,myConnection); 
        System.Data.DataSet ds = new DataSet(); 
        myConnection.Open(); 
        Da.Fill(ds,"It_AssetsType"); 
        myConnection.Close(); 
        DataTable dt = ds.Tables["It_AssetsType"]; 
        treeview.Nodes.Clear(); 
        DataRow[] rowlist = dt.Select("TYPE_PID='0'"); 
        if (rowlist.Length <= 0) return; 
        TreeNode rootNode = new TreeNode(); 
        rootNode.Text = "资产类型"; 
        rootNode.Value = "0"; 
        rootNode.Target = "left"; 
        rootNode.Expanded = isExpanded; 
        rootNode.Selected = true; 
        treeview.Nodes.Add(rootNode); 
        CreateChildNode(rootNode,dt,isExpanded,sSelectedData); 
        
    
    } 
    private void CreateChildNode(TreeNode parentNode, DataTable dt, bool isExpanded, string sSelectedData) 
    { 
        DataRow[] rowList = dt.Select("TYPE_PID='"+parentNode.Value+"'"); 
        foreach (DataRow row in rowList) 
        { 
            TreeNode node = new TreeNode(); 
            node.NavigateUrl = "AssetsType.aspx?TYPE_ID=" + row["TYPE_ID"].ToString(); 
            node.Target = "type"; 
            node.Text=row["NAME"].ToString(); 
            node.Value=row["TYPE_ID"].ToString(); 
            node.Expanded = false; 
            if (node.Value == sSelectedData) 
            { 
                node.Selected = true; 
            
            } 
            parentNode.ChildNodes.Add(node); 
            CreateChildNode(node,dt,isExpanded,sSelectedData);         
        
        }     
    
    } 
数据库结构如下: type_id  type_pid status  createtime      name 
01      0        1                      资产类型 
0104    01      1                      pos 
0102    01      1                      笔记本 
0103    01      1                      服务器 
0101    01      1                      台式机 我想实现的树形结构如下: -资产类型 
  ¦ 
  ¦-pos 
  ¦-笔记本 
  ¦-服务器 
  ¦-台式机 
不知道上面的代码是否正确,请高手指点 

解决方案 »

  1.   

    DXperience中有一xtraTreeList控件,用来实现树形结构,听说挺不错的.我也没试过,只是听说..
      

  2.   

    你的ForEach成了无限递归了吧?
    因为你传的DataTable永远不变,所以,貌似只是不停的增加相同的子节点的样子。
      

  3.   

    看着好像没问题
    你把parentNode.ChildNodes.Add(node); 中的ChildNodes换成Nodes试试
      

  4.   

    换了一个连接字符串,真郁闷,换字符串之前还要应用一个.net引用system.data.oracleclient,不然会报错