使用TreeView樹型菜單欄(遞歸調用數據庫自動建立菜單)

在作工控上位機項目時,當項目過於龐大,細分的流程就不少,須要管理的頁面也就會增長不少,這時能夠使用.NET控件TreeView進行頁面的切換管理,而且實現TreeView間的互相切換。Intouch和Wonderware能夠導入並使用TreeView控件。node

1、使用VS開發TreeView控件sql

建立一個控件項目解決方案數據庫

拖一個TreeView控件,能夠簡單的進行節點編輯架構

Tag是須要向外傳遞的數據測試

2、出現的問題this

在項目後期,對方會提出不少的改進需求,這時若是一個項目中存在過多的TreeView控件,每次改進,對於上位機系統來講就須要從新導入一次,重複過程太多,太繁瑣。spa

解決方案:在數據庫中建立菜單表,項目運行時菜單欄自動生成調試

3、建立數據庫code

建立數據庫表,MenuId是菜單序號,MenuName爲TreeView顯示的頁面名稱,MenuCode爲Tag,ParentId爲該子節點的根節點blog

4、編寫代碼自動生成

按照兩層架構來完成

 

 實體類TreeViewNode

 1 public class TreeViewNode  2  {  3         public int MenuId { get; set; }  4 
 5         public string MenuName { get; set; }  6 
 7         public string MenuCode { get; set; }  8 
 9         public string ParentId { get; set; } 10     }

Service層:MenuService

 1         /// <summary>
 2         /// 獲取全部的菜單子項  3         /// </summary>
 4         /// <returns></returns>
 5         public List<TreeViewNode> GetAllMenu()  6  {  7             string sql = "select MenuId,MenuName,MenuCode,ParentId from MenuList";  8             List<TreeViewNode> nodeList = new List<TreeViewNode>();  9             SqlDataReader objRead = SQLHelper.GetReader(sql); 10             while (objRead.Read()) 11  { 12                 nodeList.Add(new TreeViewNode() 13  { 14                     MenuId = Convert.ToInt32(objRead["MenuId"]), 15                     MenuName = objRead["MenuName"].ToString(), 16                     MenuCode = objRead["MenuCode"].ToString(), 17                     ParentId = objRead["ParentId"].ToString() 18  }); 19  } 20  objRead.Close(); 21             return nodeList; 22         }        

TreeViewMenu控件:

 1 public partial class TreeViewMenu: UserControl  2  {  3         public TreeViewMenu()  4  {  5  InitializeComponent();  6  LoadTreeViewMenu();  7  }  8 
 9         private List<TreeViewNode> nodeList = null; 10         private MenuService menuService = new MenuService(); 11         private string _currentnodename; 12         //加載樹形菜單
13         private void LoadTreeViewMenu() 14  { 15             this.nodeList = menuService.GetAllMenu(); 16 
17             //建立一個根節點
18             this.TreeView_MenuList.Nodes.Clear(); 19             TreeNode rootNode = new TreeNode(); 20             rootNode.Text = "測試"; 21             rootNode.Tag = "0"; 22             this.TreeView_MenuList.Font = new Font(this.TreeView_MenuList.Font.FontFamily, 11); 23             rootNode.NodeFont = new Font("微軟雅黑", 11.5f, FontStyle.Bold); 24             //rootNode.ImageIndex = 0;//設置根節點顯示的圖片
25             this.TreeView_MenuList.Nodes.Add(rootNode);//將根節點添加到TreeView節點中 26 
27             //基於遞歸方式添加全部子節點
28             CreateChildNode(rootNode, "0"); 29             this.TreeView_MenuList.Nodes[0].Expand();//將樹的一級節點展開
30  } 31         private void CreateChildNode(TreeNode parentNode, string preld) 32  { 33             //找到以全部該節點爲父節點的子項
34             var nodes = from list in this.nodeList where list.ParentId.Equals(preld) select list; 35             //循環建立該節點的子節點
36             foreach (var item in nodes) 37  { 38                 //建立新的節點並設置屬性
39                 TreeNode node = new TreeNode(); 40                 node.Text = item.MenuName; 41                 node.Tag = item.MenuCode; 42                 //設置節點圖標
43                 if (item.ParentId == "0") 44  { 45                     //node.ImageIndex = 1;
46                     node.NodeFont = new Font("微軟雅黑", 10.5f, FontStyle.Bold); 47  } 48                 else
49  { 50                     node.NodeFont = new Font("微軟雅黑", 10.5f); 51                     //node.ImageIndex = 3;
52  } 53                 parentNode.Nodes.Add(node);//父節點加入該子節點 54                 //使用遞歸實現子節點的添加
55  CreateChildNode(node, item.MenuId.ToString()); 56  } 57  } 58         private void TreeView_MenuList_AfterSelect(object sender, TreeViewEventArgs e) 59  { 60             _currentnodename = e.Node.Tag != null ? e.Node.Tag.ToString() : _currentnodename; 61  } 62         public string CurrentNode 63  { 64             get { return _currentnodename; } 65             set { _currentnodename = value; } 66  } 67     }

運行調試一下,菜單完美的自動生成。

把生成的TreeViewMenu.dll導入進Intouch和Wonderware便可使用

 5、後期修改完善

之後修改菜單,只需在數據庫中增刪改便可,沒必要每次都從新導入控件。

而且這個控件只須要開發一次,就能夠重複的導入不一樣的項目中,只需在數據庫中配置菜單信息便可。

相關文章
相關標籤/搜索