表中有两列—>Subject和Parent.Parent列中记录四条数据—>A A B B
Subject列中记录斯四条数据—>1234我想要的效果是:效果是:
      A
      |—1
      |
       —2
      B
      |—3
      |
       —4应该怎样实现?希望最好能给出代码。
谢谢!!!

解决方案 »

  1.   


    表数据:
        <asp:GridView ID="gv" runat="server"></asp:GridView>
        
        TreeView:
        <asp:TreeView ID="tv" runat="server"></asp:TreeView>private DataView GetDataSource()
        {
            DataTable dt = new DataTable();
            
            dt.Columns.Add(new DataColumn("Subject", typeof(String)));
            dt.Columns.Add(new DataColumn("Parent", typeof(String)));        DataRow dr = dt.NewRow();
            dr[0] = "A";
            dr[1] = "1";
            dt.Rows.Add(dr);        dr = dt.NewRow();
            dr[0] = "A";
            dr[1] = "2";
            dt.Rows.Add(dr);        dr = dt.NewRow();
            dr[0] = "B";
            dr[1] = "3";
            dt.Rows.Add(dr);        dr = dt.NewRow();
            dr[0] = "B";
            dr[1] = "4";
            dt.Rows.Add(dr);        dr = dt.NewRow();
            dr[0] = "C";
            dr[1] = "5";
            dt.Rows.Add(dr);        dr = dt.NewRow();
            dr[0] = "D";
            dr[1] = "6";
            dt.Rows.Add(dr);        dr = dt.NewRow();
            dr[0] = "D";
            dr[1] = "7";
            dt.Rows.Add(dr);        dr = dt.NewRow();
            dr[0] = "D";
            dr[1] = "8";
            dt.Rows.Add(dr);        return dt.DefaultView;
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DataView dv = GetDataSource();            gv.DataSource = dv;
                gv.DataBind();            Dictionary<string, string> dic = new Dictionary<string, string>();            for (int i = 0; i < dv.Table.Rows.Count; i++)
                {
                    if (dic.ContainsKey(dv.Table.Rows[i][0].ToString()))
                    {
                        dic[dv.Table.Rows[i][0].ToString()] = string.Format("{0},{1}", dic[dv.Table.Rows[i][0].ToString()], dv.Table.Rows[i][1].ToString());
                    }
                    else
                    {
                        dic.Add(dv.Table.Rows[i][0].ToString(), dv.Table.Rows[i][1].ToString());
                    }
                }            TreeNode tn, tnChild;
                foreach (KeyValuePair<string, string> kvp in dic)
                {
                    tn = new TreeNode(kvp.Key);                string[] array = kvp.Value.Split(',');                for (int i = 0; i < array.Length; i++)
                    {
                        tnChild = new TreeNode(array[i]);
                        tn.ChildNodes.Add(tnChild);
                    }                tv.Nodes.Add(tn);
                }
                
            }
        }
      

  2.   

    上午有个会没没能及时看帖 刚调试了下 
      Dictionary<string, string> dic = new Dictionary<string, string>(); 这个提示没有引用命名空间,在网上查了下没弄懂咋回事,水平有限 希望指点下!
      

  3.   

    找到了 using System.Collections.Generic; 我研究下
      

  4.   

     ///
        /// <summary>
        /// treeview生成
        /// </summary>
        public void CreateTree(string ParentID, TreeNode pNode)
        {        string sql = "";
            if (ParentID.Equals(""))
            {
                sql = "select * from traditionalcode where LENGTH(tra_id)=2 ";
            }
            else
            {
                sql = "select * from traditionalcode where substring(tra_id,1,2)='" + ParentID + "'  and LENGTH(tra_id)>2";
            }
            DataSet ds = new DataSet();
            //ds = MSQL.RunProc(sql, ds);
            ds = MySqlDBUtil.ExecuteQuery(sql);
            DataView dvTree = new DataView();
            dvTree = ds.Tables[0].DefaultView;
            dvTree.Sort = "tra_id";
            TreeNode funNode = new TreeNode();
            foreach (DataRowView Row in dvTree)
            {
                TreeNode Node = new TreeNode();
                if (pNode == null)                 //处理主节点
                {                Node.ToolTip = Row["tra_id"].ToString();
                    Node.Value = Row["tra_id"].ToString();
                    Node.Text = Row["tra_name"].ToString();
                    //  Node.ShowCheckBox = false;
                    // Node.Checked = false;
                    tvTraditional.Nodes.Add(Node);    //加入
                    CreateTree(Row["tra_id"].ToString(), Node); //递归            }
                else //处理子节点
                {                Node.ToolTip = Row["tra_id"].ToString();
                    Node.Target = Row["tra_id"].ToString();
                    Node.Value = Row["tra_id"].ToString();
                    Node.Text = Row["tra_name"].ToString();
                    // Node.ShowCheckBox = true;
                    // Node.Checked = false;
                    pNode.ChildNodes.Add(Node);
                    CreateTree(Row["tra_id"].ToString(), Node);            }
            }
        }
      

  5.   


     private void CreateTreeView()
        {
            if(Session["userid"]!=null)
            {
                int RoleID = usersBll.GetRoleIDByUserid(Session["userid"].ToString());
                DataTable dt = new DataTable();
                dt = MenuBLL.GetTreeMenu(RoleID);            CreateTreeViewRecursive(TreeView1.Nodes, dt, 0);            
            }    }    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"];
                if ((int)dr["ParentId"] == 1 || (int)dr["ParentId"] == 0)
                {
                    node.SelectAction = TreeNodeSelectAction.Expand;
                }
                else
                {
                    node.NavigateUrl = (string)dr["Url"];
                    node.SelectAction = TreeNodeSelectAction.SelectExpand;
                }
                
                // 设置其他属性
                // ...                 // 递归创建子节点
                CreateTreeViewRecursive(node.ChildNodes, dataSource, (int)dr["NodeId"]);            // 移除已添加行,提高性能
                dataSource.Rows.Remove(dr);
            }
        }