当前位置:网站首页>使用TreeView树型菜单栏(递归调用数据库自动创建菜单)

使用TreeView树型菜单栏(递归调用数据库自动创建菜单)

2020-11-09 12:12:28 程序猿欧文

在做工控上位机项目时,当项目过于庞大,细分的流程就很多,需要管理的页面也就会增加很多,这时可以使用.NET控件TreeView进行页面的切换管理,并且实现TreeView间的互相切换。Intouch和Wonderware可以导入并使用TreeView控件。

在做工控上位机项目时,当项目过于庞大,细分的流程就很多,需要管理的页面也就会增加很多,这时可以使用.NET控件TreeView进行页面的切换管理,并且实现TreeView间的互相切换。Intouch和Wonderware可以导入并使用TreeView控件。

一、使用VS开发TreeView控件

创建一个控件项目解决方案

拖一个TreeView控件,可以简单的进行节点编辑

Tag是需要向外传递的数据

二、出现的问题

在项目后期,对方会提出很多的改进需求,这时如果一个项目中存在过多的TreeView控件,每次改进,对于上位机系统来说就需要重新导入一次,重复过程太多,太繁琐。

解决方案:在数据库中创建菜单表,项目运行时菜单栏自动生成

三、创建数据库

创建数据库表,MenuId是菜单序号,MenuName为TreeView显示的页面名称,MenuCode为Tag,ParentId为该子节点的根节点

四、编写代码自动生成

按照两层架构来完成

 

 实体类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    Lo.........

版权声明
本文为[程序猿欧文]所创,转载请带上原文链接,感谢
https://my.oschina.net/mikeowen/blog/4709320