zoukankan      html  css  js  c++  java
  • 生成树的两种递归方式


            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);
                }
            }

  • 相关阅读:
    《这本书能让你戒烟》:野路子戒烟法。也许读者是否戒烟成功已经不重要了,重要的是这本书的销售非常成功。三星推荐
    《100种过度医疗大公开》:转译自日文版,日文版依据的是美国的“Choosing Wisely”项目。三星推荐
    《癌症·真相:医生也在读》:癌症新药专家的癌症防治科普,重点是免疫疗法。四星推荐。
    《抗癌前线:癌症研究的前沿进展》:肿瘤基因组学博士的肿瘤科普,三星推荐
    《医疗改革:给政策制定者的建议》:真的是给政策制定者看的,文风比较专业和枯燥,二星
    《120医生教您学急救》:内容还是偏专业,心肺复苏显然不应该是仅仅通过看书来学习的。三星推荐
    [TypeScript] Overload a Function with TypeScript’s Overload Signatures
    [TypeScript] Use TypeScript’s never Type for Exhaustiveness Checking
    [TypeScript] Represent Non-Primitive Types with TypeScript’s object Type
    [TypeScript] Define Custom Type Guard Functions in TypeScript
  • 原文地址:https://www.cnblogs.com/wangyhua/p/4050655.html
Copyright © 2011-2022 走看看