• C# 递归产生树


       //递归产生树
            private void CreateTwo(TreeNode node, int id)
            {
                #region --根据指定ID查找数据到 dt
                string strSql = "select * from Menu where MenuParent = " + id;
                DataTable dt = SqlHelper.ExecuteDatatable(strSql);
                #endregion
    
                if (id == 0)                                             // id = 0 是根节点 
                {
                    for (int i = 0; i < dt.Rows.Count; i++) //先查询PID=0的
                    {
                        TreeNode nd = new TreeNode();
                        nd.Text = dt.Rows[i]["MenuName"].ToString();
                        CreateTwo(nd, Convert.ToInt32(dt.Rows[i]["MenuId"].ToString())); //把根节点ID传过去查找PID是该id的子节点
                        treeView1.Nodes.Add(nd);
                    }
                }
                else
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        TreeNode Tnode = new TreeNode();
                        Tnode.Text = dt.Rows[i]["MenuName"].ToString();
                        CreateTwo(Tnode, Convert.ToInt32(dt.Rows[i]["MenuId"].ToString()));
                        node.Nodes.Add(Tnode);
                    }
                }
            }
    复制代码

     非递归绑定3级别

    复制代码
            //绑定TrreView
            private void InitModuleTree(DataTable dt)
            {
                //清空treeview上所有节点
                this.treeView1.Nodes.Clear();
    
                //先绑定父节点
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    int Prent = Convert.ToInt16(dt.Rows[i]["MenuParent"]);//
                    if (Prent == 0) //先绑定父节点
                    {
                        TreeNode nodeParent = new TreeNode();
                        nodeParent.Tag = dt.Rows[i]["MenuId"];//设置一个值,为加入子节点做准备,(先这样用,不管Tag是什么)
                        nodeParent.Text = dt.Rows[i]["MenuName"].ToString();
                        treeView1.Nodes.Add(nodeParent);
                    }
                }
                //在绑定子节点(绑定2级目录)
                foreach (TreeNode item in treeView1.Nodes)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        var ss = dt.Rows[i]["MenuParent"]; //获取pid
                        var s1 = item.Tag;
                        if ((int)item.Tag == (int)dt.Rows[i]["MenuParent"]) //dt该行的pid = 这个父节点ID (表示属该行子节点)
                        {
                            TreeNode childNode = new TreeNode();
                            childNode.Tag = dt.Rows[i]["MenuId"];
                            childNode.Text = dt.Rows[i]["MenuName"].ToString();
                            item.Nodes.Add(childNode); //加入父节点中
                        };
    
                    }
                }
                //在绑定子节点(绑定3级目录)
                foreach (TreeNode item1 in treeView1.Nodes)
                {
                    int index0 = treeView1.Nodes.IndexOf(item1); //index 为索引值
                    var nodes1 = treeView1.Nodes[index0].Nodes;
    
                    foreach (TreeNode item in nodes1)
                    {
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            var ss = dt.Rows[i]["MenuParent"]; //获取pid
                            var s1 = item.Tag;
    
                            if ((int)item.Tag == (int)dt.Rows[i]["MenuParent"]) //dt该行的pid = 这个父节点ID (表示属该行子节点)
                            {
                                TreeNode childNode = new TreeNode();
                                childNode.Tag = dt.Rows[i]["MenuId"];
                                childNode.Text = dt.Rows[i]["MenuName"].ToString();
                                item.Nodes.Add(childNode); //加入父节点中
                            };
    
                        }
                    }
                }
    
                treeView1.ExpandAll();      //展开整棵树
            }
  • 相关阅读:
    C#算法,二叉树,单链表,反向链表,stack栈
    系统架构师学习笔记_第十一章(上)_连载
    系统架构师学习笔记_第四章(下)_连载
    [项目过程中所遇到的各种问题记录]ORM篇——使用NHibernate配置对象实体的一些小问题
    含HTML标记的内容分页 (C#)
    PowerShell在SharePoint 2010自动化部署中的应用(1)代码获取
    走向ASP.NET架构设计第一章:走向设计
    asp.net 遍历XML文件节点信息
    系统架构师学习笔记_第一章_连载
    AOP 你想干什么 IOC 你服务什么
  • 原文地址:https://www.cnblogs.com/ljs-13/p/12109224.html
Copyright © 2020-2023  润新知