• Tree 菜单 递归


    转载:http://www.cnblogs.com/igoogleyou/archive/2012/12/17/treeview2.html

     

    一,通过查询数据库的方法

     

    ID 为主键,PID 表明数据之间的关系。

     

    /// <summary>
    /// 生产树的代码;
    /// </summary>
    /// <param name="node"> 根节点</param>
    /// <param name="id">主键</param>
     
            private void CreateTwo(TreeNode node, int id)
            {
                string strSql = "select * from TableTest where PID = " + id;
                DataTable dt = SqlClass.GetTable(strSql);
                if (id == 0)                                  // id = 0 是根节点 
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        TreeNode nd = new TreeNode();
                        nd.Text = dt.Rows[i]["Name"].ToString();
                        CreateTwo(nd, Convert.ToInt32(dt.Rows[i]["id"].ToString()));
                        tvwTwo.Nodes.Add(nd);
                    }
                }
                else
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        TreeNode Tnode = new TreeNode();
                        Tnode.Text = dt.Rows[i]["Name"].ToString();
                        CreateTwo(Tnode, Convert.ToInt32(dt.Rows[i]["id"].ToString()));
                        node.Nodes.Add(Tnode);
                    }
                }
            }
    
     
     
    则个代码比较简单 只需要查询一个数据表。
    不过会查询多次,我觉得不合适。
    所以第二个方法,全部拿出来,在缓存里操作。
     

    生成结果:

     

    -------------------------------------------------------------------------------------------------------------------------------

     

    二,通过linq 获取菜单的通用方法:

     

    static void Main(string[] args)
            {
                //最终结果
                UserR ur = new UserR();
                //调用
                Create(ur, 0);
                //打印
                Print(ur);
                string str = JsonConvert.SerializeObject(ur);
                Console.ReadLine();
            }
            //测试数据
            static List<User> list = new List<User>()
                {
                    new User(){id=1,name="food",parentId=0},
                    new User(){id=2,name="fruit",parentId=1},
                    new User(){id=3,name="red",parentId=2},
                    new User(){id=4,name="cherry",parentId=3},
                    new User(){id=5,name="yellow",parentId=2},
                    new User(){id=6,name="banana",parentId=5},
                    new User(){id=7,name="meat",parentId=1},
                    new User(){id=8,name="beef",parentId=7},
                    new User(){id=9,name="pork",parentId=7},
                };
    
            
    
            //递归遍历
            private static void Create(UserR node, int id)
            {
                var q = list.Where(x => x.parentId == id).ToList();
                for (int i = 0; i < q.Count; i++)
                    {
                        UserR nd = new UserR();
                        nd.id = q[i].id;
                        nd.name = q[i].name;
                        Create(nd, q[i].id);
                        node.u.Add(nd);
                    }
                
            }
    
            //打印查看结果
            static void Print(UserR ur)
            {
                Console.WriteLine(ur.name);
                if (ur.u != null)
                    foreach (var item in ur.u)
                    {
                        Print(item);
                    }
            }
    
            //查询出的实体层
            public class User
            {
                public int id { get; set; }
                public string name { get; set; }
                public int parentId { get; set; }
            }
            //遍历后的实体层
            public class UserR
            {
                public int id { get; set; }
                public string name { get; set; }
                public List<UserR> u = new List<UserR>();
                public int parentId { get; set; }
            }
     



     

  • 相关阅读:
    打卡规则小模块设计
    json和ajax学习
    求两个数的百分比&时间格式化&ajax返回json
    spring security运行流程图(转)
    DelegatingFilterProxy作用浅析
    网站URL重写(Java UrlRewrite 的使用)
    JVM的常用的调优策略和垃圾回收算法及Tomcat的常用调优参数
    JQuery 的Ajax的使用
    servlet程序HTTP Status 500
    CanvasRenderingContext2D.drawImage()无效,not working
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/9779904.html
Copyright © 2020-2023  润新知