通過循環實現樹狀菜單


1、數據結構

 public class Data
    {
        public string ID { get; set; }
        public string Name { get; set; }

        public string ParentId { get; set; }

        public List<Data> ChildData { get; set; }
    }

2、模擬數據

  List<Data> list = new List<Data> { new Data {
                ID="1",
                Name="name1",
                ParentId="0",

            } ,
            new Data {
                ID="2",
                Name="name2",
                ParentId="0",

            } ,
            new Data {
                ID="3",
                Name="name3",
                ParentId="1",

            } ,
            new Data {
                ID="4",
                Name="name4",
                ParentId="1",

            } ,
            new Data {
                ID="5",
                Name="name5",
                ParentId="2",

            } ,
            new Data {
                ID="6",
                Name="name6",
                ParentId="4",

            },    
               new Data {
                ID="7",
                Name="name7",
                ParentId="6",
             }
            };

4、對數據進行排序,目的是先加載父節點。 

   var listData = list.OrderBy(o => o.ParentId).ToList();

5、定義結果集合

  List<Data> resList = new List<Data>();

6、for 循環遍歷 或者foreach 遍歷排序好的數據,生成樹結構菜單

         foreach (var item in listData)
            {
                if (item.ParentId == "0")
                {
                    resList.Add(item);
                }
                else
                {
                    //這個地方是 最難理解得地方,我一直在想如何找他們得父節點,就是想通過一層一層去找,這種想法就是錯的,
                    //正確得做法是只要讓子節點加載到父節點,就可以了;
                    var parent = listData.Where(x => x.ID == item.ParentId).FirstOrDefault();
                    if (parent.ChildData == null)
                    {
                        parent.ChildData = new List<Data>();W
                    }
                    parent.ChildData.Add(item);
                }
            }

7、序列化成json

  var resJson = Newtonsoft.Json.JsonConvert.SerializeObject(resList);

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM