首先从数据库中读出数据实现treeview,数据库有三个字段NodeId,ParentId,Nodename 程序如下:
protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            CreateTreeView();
        }
    }    /// <summary>
    /// 创建 TreeView
    /// 此方法采取一次性加载目标数据到 DataTable,递归查询 DataTable ,创建子节点
    /// </summary>
    private void CreateTreeView()
    {
        //const int VirtualRootId = 0; // 虚拟的根节点 ID, 表中 ParentID=0 的节点表示无实际父节点
        const string SQL_SELECT = "SELECT NodeId, NodeName,ParentId,Phone FROM TreeView ORDER BY NodeId ASC";        //
        string connStr = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=D:\\Visual Studio 2005\\WebSites\\00\\App_Data\\noahsoft.mdb"; ;
        //
        OleDbDataAdapter da = new OleDbDataAdapter(SQL_SELECT, connStr);
        DataTable dt = new DataTable();
        //
        da.Fill(dt);
        //
        CreateTreeViewRecursive(TreeView1.Nodes, dt, 0);
    }    /// <summary>
    /// 递归查询数据,创建 TreeNode 节点
    /// </summary>
    /// <param name="nodes"></param>
    /// <param name="dataSource"></param>
    /// <param name="parentId"></param>
    private void CreateTreeViewRecursive(TreeNodeCollection nodes, DataTable dataSource, int parentId)
    {
        //
        string fliter = String.Format("ParentId={0}", parentId);
        // 查询子节点
        DataRow[] drArr = dataSource.Select(fliter);        TreeNode node;
        foreach (DataRow dr in drArr)
        {
            //
            node = new TreeNode();
            nodes.Add(node);
            node.Text = (string)dr["NodeName"];
            node.Value = dr["Phone"].ToString();
            int id = (int)dr["NodeId"];
          
         //  Response.Write(id);
          // Response.Write("<br>");
    
            // 设置其他属性
            //      
            node.SelectAction = TreeNodeSelectAction.SelectExpand;            // 递归创建子节点
            CreateTreeViewRecursive(node.ChildNodes, dataSource, id);            // 移除已添加行,提高性能
            dataSource.Rows.Remove(dr);
        }
    }  
  之后通过点击节点将节点信息添加到TextBox1中去,点击一组则添加一组。程序如下:
 string j;
   
    protected void TreeView1_SelectedNodeChanged1(object sender, EventArgs e)
    {
               string s = TreeView1.SelectedNode.Value;
          
        if (TreeView1.SelectedNode.ChildNodes.Count == 0)//点击用户时的操作
        {
            if (TextBox1.Text != "")
            {
                j = String.Concat(TextBox1.Text, ",", s);            }
            else
            {
                j = s;
            }
            TextBox1.Text = j;
        }
        else                         //点击组时的操作
        {
           
          for (int i = 0; i < TreeView1.SelectedNode.ChildNodes.Count; i++)
            {
                string q = TreeView1.SelectedNode.ChildNodes[i].Value;                Response.Write(q);
                if (TextBox1.Text != "")
                {
                    j = String.Concat(TextBox1.Text, ",", q);
                }
                else
                {
                    j = q;
                }
                TextBox1.Text = j;            }   
        }
    }
   结果点击组时总是添加第一组的信息,但是自己建一个treeview自己添加数据在测试添加组成功。请大家帮忙看看。谢谢!!

解决方案 »

  1.   


    protected void Page_Load(object sender, EventArgs e) 

       if (!IsPostBack) 
       { 
          CreateRootNode(); 
       } 
    } private void CreateRootNode()
    {
      TreeNode root = new TreeNode("根节点");
      TreeView1.Nodes.Add(root);
      //添加相应下节根节点
      CrateChildNodes(root);   //添加相应子节点,也可在选中后再加载,看数据量是否很大
    }private void CrateChildNodes(TreeNode parentNode)
    {
      //递归调用本身,逐层添加子节点
      //TreeNode childNode = new TreeNode("","");
      //CrateChildNodes(childNode);
    }protected void TreeView1_AfterSelected(object sender,TreeViewEventArgs e)
    {
      TreeNode curNode = e.Node;
      //其他操作
    }
      

  2.   

    数据和界面组件纠缠在一起了,乱!如果你喜欢编码(虽然也有更少编码的方法),你可以创建一个类型为 SiteMapNodeCollection (或者子类)的对象,然后把它赋值给 TreeView1.DataSource。
      

  3.   

    protected void TreeView1_SelectedNodeChanged1(object sender, EventArgs e) 
    ==
    这个方法你最好说明一下干了什么,看得累
      

  4.   


    这个方法是实现点击treeview一个叶子节点就把节点的value添加到TextBox1中去,如果点击组节点就把组中所有节点的value值都添加到TextBox1中。
      

  5.   


    protected void Page_Load(object sender, EventArgs e) 
        { 
            if (!IsPostBack) 
            { 
                CreateTreeView(); 
            } 
        }     /// <summary> 
        /// 创建 TreeView 
        /// 此方法采取一次性加载目标数据到 DataTable,递归查询 DataTable ,创建子节点 
        /// </summary> 
        private void CreateTreeView() 
        { 
            //const int VirtualRootId = 0; // 虚拟的根节点 ID, 表中 ParentID=0 的节点表示无实际父节点 
            const string SQL_SELECT = "SELECT NodeId, NodeName,ParentId,Phone FROM TreeView ORDER BY NodeId ASC";         // 
            string connStr = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=D:\\Visual Studio 2005\\WebSites\\00\\App_Data\\noahsoft.mdb"; ; 
            // 
            OleDbDataAdapter da = new OleDbDataAdapter(SQL_SELECT, connStr); 
            DataTable dt = new DataTable(); 
            // 
            da.Fill(dt); 
            // 
            CreateTreeViewRecursive(TreeView1.Nodes, dt, 0); 
        }     /// <summary> 
        /// 递归查询数据,创建 TreeNode 节点 
        /// </summary> 
        /// <param name="nodes"> </param> 
        /// <param name="dataSource"> </param> 
        /// <param name="parentId"> </param> 
        private void CreateTreeViewRecursive(TreeNodeCollection nodes, DataTable dataSource, int parentId) 
        { 
            // 
            string fliter = String.Format("ParentId={0}", parentId); 
            // 查询子节点 
            DataRow[] drArr = dataSource.Select(fliter);         TreeNode node; 
            foreach (DataRow dr in drArr) 
            { 
                // 
                node = new TreeNode(); 
                nodes.Add(node); 
                node.Text = (string)dr["NodeName"]; 
                node.Value = dr["Phone"].ToString(); 
                int id = (int)dr["NodeId"]; 
              
            //  Response.Write(id); 
              // Response.Write(" <br>"); 
        
                // 设置其他属性 
                //      
                node.SelectAction = TreeNodeSelectAction.SelectExpand;             // 递归创建子节点 
                CreateTreeViewRecursive(node.ChildNodes, dataSource, id);             // 移除已添加行,提高性能 
                dataSource.Rows.Remove(dr); 
            } 
        }  
      之后通过点击节点将节点信息添加到TextBox1中去,点击一组则添加一组。程序如下: 
    string j; 
      
        protected void TreeView1_SelectedNodeChanged1(object sender, EventArgs e) 
        { 
                  string s = TreeView1.SelectedNode.Value; 
              
            if (TreeView1.SelectedNode.ChildNodes.Count == 0)//点击用户时的操作 
            { 
                if (TextBox1.Text != "") 
                { 
                    j = String.Concat(TextBox1.Text, ",", s);             } 
                else 
                { 
                    j = s; 
                } 
                TextBox1.Text = j; 
            } 
            else                        //点击组时的操作 
            { 
              
              for (int i = 0; i < TreeView1.SelectedNode.ChildNodes.Count; i++) 
                { 
                    string q = TreeView1.SelectedNode.ChildNodes[i].Value;                 Response.Write(q); 
                    if (TextBox1.Text != "") 
                    { 
                        j = String.Concat(TextBox1.Text, ",", q); 
                    } 
                    else 
                    { 
                        j = q; 
                    } 
                    TextBox1.Text = j;             }  
            } 
        } 
      

  6.   

    for (int i = 0; i < TreeView1.SelectedNode.ChildNodes.Count; i++) 
                { 
                    string q = TreeView1.SelectedNode.ChildNodes[i].Value;                 Response.Write(q); 
                    if (TextBox1.Text != "") 
                    { 
                        j = String.Concat(TextBox1.Text, ",", q); 
                    } 
                    else 
                    { 
                        j = q; 
                    } 
                    TextBox1.Text = j;             }  
            } 
        } 
    //仅是对选择节点子节点添加,最好是做循环递归获取,测试的时候设置断点跟踪调试
      

  7.   

    请问15楼zhxingway  要如何实现,能否说的详细点。谢谢