zoukankan      html  css  js  c++  java
  • .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);
    }
    }

    }

  • 相关阅读:
    VS 2010 Addin 开发 1
    事件冒泡和默认事件
    闭包试验
    查询字符串中出现频率最高的几种方法
    JS函数中的参数
    a 项目已更新,b 项目可以基于这个项目处理
    windows 生成ssh 公钥 命令
    git fetch upstream 报错 XXX Permission denied (publickey). fatal: Could not read from remote repository
    考试的那点事儿
    MySQL数据库InnoDB存储引擎多版本控制(MVCC)实现原理分析
  • 原文地址:https://www.cnblogs.com/handk/p/1894016.html
Copyright © 2011-2022 走看看