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



     

  • 相关阅读:
    (转)DirectInput编程基础
    怎么样解决3D 地形、天空盒等网格模型出现缝隙的问题
    D3DLIGHT9光源
    D3DXCreateTextureFromFileEx
    CreateVertexBuffer和CreateIndexBuffer
    D3D中材质通过D3DMATERIAL9结构说明
    IDirect3DVertexBuffer9::Lock和IDirect3DIndexBuffer9::Lock
    D3DPRESENT_PARAMETERS_结构(D3D初始化)(
    Windows Phone开发(6):处理屏幕方向的改变
    Windows Phone开发(4):框架和页
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/9779904.html
Copyright © 2011-2022 走看看