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

    }

  • 相关阅读:
    ASP.NET Web API +Swagger创建与汉化生成 API说明文档
    Apple 开发者账号 All In One
    CS50 2022 All In One
    TypeScript private field All In One
    js RegExp test bug All In One
    vite preview not work All In One
    Flutter Resources All In One
    table 组件性能优化 All In One
    Stanford CS193p All In One
    Swift 5.x bug All In One
  • 原文地址:https://www.cnblogs.com/handk/p/1894016.html
Copyright © 2020-2023  润新知