首先創建模型類Menus
public class Menus { //菜單Id public int Id { get; set; } //菜單名 public string MenuName { get; set; } //父節點Id public int ParentId { get; set; } }
窗體中放入button跟TreeView控件
聲明全局變量
private static List<Menus> menus;
添加按鈕事件
private void button1_Click(object sender, EventArgs e) { menus = new List<Menus>(); menus.Add(new Menus { Id = 1, MenuName = "基礎設置", ParentId = 0 }); menus.Add(new Menus { Id = 2, MenuName = "采購管理", ParentId = 0 }); menus.Add(new Menus { Id = 3, MenuName = "系統設置", ParentId = 1 }); menus.Add(new Menus { Id = 4, MenuName = "用戶管理", ParentId = 1 }); menus.Add(new Menus { Id = 5, MenuName = "采購訂單", ParentId = 2 }); menus.Add(new Menus { Id = 6, MenuName = "采購入庫", ParentId = 2 }); menus.Add(new Menus { Id = 7, MenuName = "用戶", ParentId = 4 }); menus.Add(new Menus { Id = 8, MenuName = "采購退貨", ParentId = 2 }); menus.Add(new Menus { Id = 9, MenuName = "用戶組", ParentId = 4 }); menus.Add(new Menus { Id = 10, MenuName = "權限管理", ParentId = 4 }); //首先查出頂級菜單,循環添加 IEnumerable<Menus> menu = from m in menus where m.ParentId == 0 orderby m.ParentId select m; foreach (var item in menu) { TreeNode node = new TreeNode(); node.Tag = item; node.Text = item.MenuName; treeView1.Nodes.Add(node); //將當前節點作為參數傳入子節點 AddChildMenu(node); } }
子節點遞歸實現
private void AddChildMenu(TreeNode node) { Menus menu = new Menus(); menu = (Menus)node.Tag; //將父節點轉為Model //查出當前子節點中所有同父節點Id一樣的數據 IEnumerable<Menus> childMenu = from m in menus where m.ParentId == menu.Id orderby m.Id select m; foreach (var item in childMenu) { TreeNode childNode = new TreeNode(); childNode.Tag = item; childNode.Text = item.MenuName; node.Nodes.Add(childNode); //添加子節點 AddChildMenu(childNode); //遞歸調用自己,直到父節點添加所有子節點結束 } }
效果展示