点击treeview根节点把其value添加到TextBox控件中,点击一个组把整个组的节点value添加到TextBox中,代码如下:
   string j ;
    string q;
    protected void treeMenu_SelectedNodeChanged(object sender, EventArgs e)
    {
      //  Message.Text = "You selected: " + treeMenu.SelectedNode.Text ;        if (treeMenu.SelectedNode.ChildNodes.Count == 0)//点击用户时的操作
        {
            string s = treeMenu.SelectedNode.Value ;
            if (TextBox1.Text != "")
            {
                j = String.Concat(TextBox1.Text, ",", s);            }
            else
            {
                j = s;
            }
            TextBox1.Text = j;
        }
        else                         //点击组时的操作
        {
            //q = treeMenu.SelectedNode.ChildNodes[0].Text;      
            for (int i = 0; i < treeMenu.SelectedNode.ChildNodes.Count; i++)
            {
                q = treeMenu.SelectedNode.ChildNodes[i].Value ;
                Response.Write(q);
                if (TextBox1.Text != "")
                {
                    j = String.Concat(TextBox1.Text, ",", q);
                }
                else
                {
                    j = q;
                }
                TextBox1.Text = j;
            }
        }
   为什么无论点那个组,添加的都是第一组的value?

解决方案 »

  1.   

     //q = treeMenu.SelectedNode.ChildNodes[0].Text;      
                for (int i = 0; i < treeMenu.SelectedNode.ChildNodes.Count; i++) 
                { 
                    q = treeMenu.SelectedNode.ChildNodes[i].Value ; 
                    Response.Write(q); 
                    if (TextBox1.Text != "") 
                    { 
                        j += String.Concat(TextBox1.Text, ",", q); 
                    } 
                    else 
                    { 
                        j+ = q; 
                    } 
                    TextBox1.Text = j; 
                } 
            } 
    看红色部分
      

  2.   

    3楼的不对吧,String.Concat()就是连接的意思了,再自加就不对了吧!
      

  3.   

       for (int i = 0; i < treeMenu.SelectedNode.ChildNodes.Count; i++) 
                { 
                    q = treeMenu.SelectedNode.ChildNodes[i].Value ; 
                    Response.Write(q); 
                    if (TextBox1.Text != "") 
                    { 
                        TextBox1.Text+=treeMenu.SelectedNode.ChildNodes[i].Value ;                } 
                   
                } 
      

  4.   

    wangjun8868 你可能理解错我的意思了,我是说点击每一个分组添加的都是第一个分组的数据。
    例如 我有 朋友,同事,同学三个组 不论点击同事还是同学添加的都是朋友分组的数据
      
     
     
      

  5.   

    不知道这样做意义何在,那如果都收缩回去,是不是还要写代码吗??
    需要比较奇怪。
    ,可能8楼只实现了treeMenu.SelectedNode.ChildNodes.Count != 0时候的需求!
      

  6.   

    我的TreeView是从数据库中读出来的
      

  7.   

    但是显示的原理没错吧
    treeMenu.SelectedNode.ChildNodes[i].Value ; 显示始终是你选中结点的文本值
    这个数据库没关系吧
      

  8.   

    我单独测试没有错误
    1000 
        1001 
        1002 
    2000 
        2001 
        2002 
    .... 
        .... 
    当你选中1000时 
    文本框中是 1001,1002 
    继续点就变成1001,1002,2001,2002 
    但是我加上从数据库中读数据创建treeview时就不行.代码如下:
     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);
            OleDbConnection myConnection = new OleDbConnection(System.Configuration.ConfigurationManager.AppSettings["con"]);      
            //
            CreateTreeViewRecursive(treeMenu.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 ();
                // 设置其他属性
                //      
               
                // 递归创建子节点
                CreateTreeViewRecursive(node.ChildNodes, dataSource, (int)dr["NodeId"]);            // 移除已添加行,提高性能
                dataSource.Rows.Remove(dr);
            }
        }
    这是怎么回事啊!弄了一天了,郁闷死了。