• .net 递归生成树,根据编码进行递归.


    昨天在网上一个网友帮忙让实现一个树的程序,表结构为:

     效果图:

    看到表结构很汗颜,抛开字段的命名方式不说,实际开发中生成树一般会加一个parentid 字段,这样的话在递归的时候也会很方便,并且可以无限级别的递归,但像这种方式构造树的话局限多多,但既然人家这样给需求了,咱也不好改别人的需求不是吗?

    研究了一下上面的表结构,发现前两位为第一级节点,中间三位为第二级节点,后面可能最多还有三级子节点,但是估计后面的一级节点的可能还是很小,为了通用,因此还是考虑到最佳状况.

    众所周知,生成树的话,最常用的也最有效的手段就是递归,因此咱也不例外.花了十几分钟时间编写,调试.最终代码如下:

    DBHelper dbhelper=new DBHelper();
    protected void Page_Load(object sender, EventArgs e)
    {
    if(!IsPostBack)
    {
    DataTable dt
    =dbhelper.ReturnDataSet("select * from biao order by bianma asc").Tables[0];
    TreeView1.Nodes.Clear();
    TreeNode Node1
    = new TreeNode("根目录");
    Node1.Value
    = "root";
    TreeView1.Nodes.Add(Node1);
    CreateNode(dt, Node1,
    "000000");
    }
    }
    /// <summary>
    /// 存储已经创建的节点的编号.
    /// </summary>
    public ArrayList Code = new ArrayList();
    /// <summary>
    /// 递归创建树节点.
    /// </summary>
    /// <param name="dt"></param>
    /// <param name="tn"></param>
    /// <param name="parentid"></param>
    public void CreateNode(DataTable dt,TreeNode tn,string parentid)
    {
    DataRow[] drs;
    if (parentid != "000000")
    parentid
    = parentid.TrimEnd('0');//这里使用了一个技巧.
    if (parentid == "000000")
    {
    drs
    = dt.Select(" bianma like '%000000'");//顶层
    }
    else
    {
    drs
    = dt.Select(String.Format(" bianma like '{0}%'", parentid));
    }

    if (drs.Length < 1)
    return;

    foreach (DataRow dr in drs)
    {
    string p = dr["bianma"].ToString();
    if (!Code.Contains(p))
    {
    Code.Add(p);
    TreeNode tntemp
    = new TreeNode();
    tntemp.Text
    = dr["mingcheng"].ToString();
    tntemp.Value
    = p;
    CreateNode(dt, tntemp, p);
    tn.ChildNodes.Add(tntemp);
    }
    }

    }

  • 相关阅读:
    14.2.3 InnoDB Redo Log
    14.2.3 InnoDB Redo Log
    14.2.2 InnoDB Multi-Versioning InnoDB 多版本
    mysql union ,UNION RESULT
    mysql union ,UNION RESULT
    mysql 查询优化案例
    视图上无法创建索引
    视图上无法创建索引
    /etc/security/limits.conf 设置
    14.2.1 MySQL and the ACID Model
  • 原文地址:https://www.cnblogs.com/handk/p/1894016.html
Copyright © 2020-2023  润新知