生成树的两种递归方式


        protected void Page_Load(object sender, EventArgs e)
        {
            string connecting = System.Configuration.ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;
            DataSet ds = new DataSet();
            try
            {
                using (SqlConnection conn = new SqlConnection(connecting))
                {
                    conn.Open();
                    string sql = "select * from dbo.Node";

                    using (SqlDataAdapter da = new SqlDataAdapter(sql, conn))
                    {
                        da.Fill(ds);
                    }
                    conn.Close();
                }
            }
            catch (Exception err)
            {

                throw new Exception(err.Message + err.StackTrace);
            }
            //绑定一级节点 通过dataviw来实现
            TreeNode firstNode = new TreeNode();
            firstNode.Value = "-1";
            firstNode.Text = "项目简介 ";
            tvTreeView.Nodes.Add(firstNode);
            DataView dv = ds.Tables[0].DefaultView;
            dv.RowFilter = "NodeParentId='-1'";
            foreach (DataRowView dr in dv)
            {
                TreeNode rootNode = new TreeNode();
                rootNode.Text = dr["NodeName"].ToString();
                rootNode.Value = dr["NodeId"].ToString();
                tvTreeView.Nodes.Add(rootNode);
                CreateChildNodes(rootNode.Value, ds.Tables[0], rootNode);
            }

        }
        protected void CreateChildNodes(string parentId,DataTable dt,TreeNode parentNode)
        {
            DataView dv= dt.DefaultView;
            dv.RowFilter = "NodeParentId='" +parentId+"'";
            foreach (DataRowView dr in dv)
            {
                TreeNode childNode = new TreeNode();
                childNode.Text = dr["NodeName"].ToString();
                childNode.Value = dr["NodeId"].ToString();
                parentNode.ChildNodes.Add(childNode);
                CreateChildNodes(childNode.Value, dt, childNode);
            }
           
        }
    }

 

 

第二种:

  protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                string constring = System.Configuration.ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;
                string sql = "select * from Node";
                DataSet ds = new DataSet();
                using (SqlConnection conn = new SqlConnection(constring))
                {
                    conn.Open();
                    using (SqlDataAdapter da = new SqlDataAdapter(sql, conn))
                    {
                        da.Fill(ds);
                    }
                    conn.Close();
                }
                DataTable dt = ds.Tables[0];
                TreeNode node = new TreeNode();
                node.Text = "项目简介 ";
                node.Value = "-1";
                tvBind.Nodes.Add(node);
                //绑定一级节点
                //第一种方法用dataRow
                DataRow[] rowlist = dt.Select("NodeParentId='-1'");
                foreach (DataRow dr in rowlist)
                {
                    TreeNode rootNode = new TreeNode();
                    rootNode.Value = dr["NodeID"].ToString();
                    rootNode.Text = dr["NodeName"].ToString();
                    rootNode.Expanded = false;
                    tvBind.Nodes.Add(rootNode);
                    CreateChildNode(rootNode, Convert.ToInt32(rootNode.Value), dt);
                }
            }
          

        }
        /// <summary>
        /// 递归找出节点id
        /// </summary>
        /// <param name="node"></param>
        /// <param name="nodeId"></param>
        protected void CreateChildNode(TreeNode node,int parentId,DataTable dt)
        {
            DataRow[] rowList = dt.Select("NodeParentId='" + parentId + "'");
            foreach (DataRow dr in rowList)
            {
                TreeNode childNode = new TreeNode();
                childNode.Value = dr["NodeID"].ToString();
                childNode.Text=dr["NodeName"].ToString();
                node.ChildNodes.Add(childNode);
                CreateChildNode(childNode, Convert.ToInt32(childNode.Value), dt);
            }
        }

 

转载于:https://www.cnblogs.com/wangyhua/archive/2012/06/17/4050655.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
//设定生成树的原始数据 void getdatable() { tblDatas.Columns.Add("groupid", Type.GetType("System.String")); tblDatas.Columns.Add("groupname", Type.GetType("System.String")); tblDatas.Columns.Add("parentid", Type.GetType("System.String")); tblDatas.Rows.Add(new object[] { "1", "机关", "0" }); tblDatas.Rows.Add(new object[] { "2", "学院", "0" }); tblDatas.Rows.Add(new object[] { "3", "教学管理中心", "1" }); tblDatas.Rows.Add(new object[] { "4", "校园管理中心", "1" }); tblDatas.Rows.Add(new object[] { "5", "数据中心", "3" }); tblDatas.Rows.Add(new object[] { "6", "信息中心", "3" }); tblDatas.Rows.Add(new object[] { "7", "一卡通", "4" }); tblDatas.Rows.Add(new object[] { "8", "保卫处", "4" }); tblDatas.Rows.Add(new object[] { "9", "信工系", "2" }); tblDatas.Rows.Add(new object[] { "10", "艺术系", "2" }); dataGridView1.DataSource = tblDatas; } //递归生成树函数 public void AddTree(int ParentID, TreeNode pNode) { DataTable dt = new DataTable(); dt = tblDatas; DataView dvTree = new DataView(dt); //过滤ParentID,得到当前的所有子节点 dvTree.RowFilter = "parentid = " + ParentID; foreach (DataRowView Row in dvTree) { TreeNode Node = new TreeNode(); if (pNode == null) { //添加根节点 Node.Text = Row["groupname"].ToString(); treeView1.Nodes.Add(Node); AddTree(Int32.Parse(Row["groupid"].ToString()), Node); //再次递归 } else { //添加当前节点的子节点 Node.Text = Row["groupname"].ToString(); pNode.Nodes.Add(Node); AddTree(Int32.Parse(Row["groupid"].ToString()), Node); //再次递归 } } } //调用递归函数在treeView1里面显示给出数据的树形图 private void button1_Click(object sender, EventArgs e) { treeView1.Nodes.Clear(); AddTree(0, (TreeNode)null); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值