当前位置:网站首页>使用TreeView树型菜单栏(递归调用数据库自动创建菜单)
使用TreeView树型菜单栏(递归调用数据库自动创建菜单)
2020-11-09 12:12:00 【程序猿欧文】
在做工控上位机项目时,当项目过于庞大,细分的流程就很多,需要管理的页面也就会增加很多,这时可以使用.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
边栏推荐
- 在嵌入式设备中实现webrtc的第三种方式③
- JVM学习(五) -执行子系统
- Sql分组查询后取每组的前N条记录
- AI应届生年薪涨到40万了,你现在转行还来得及!
- 注意.NET Core进行请求转发问题
- [design pattern] Chapter 4: Builder mode is not so difficult
- 美国大选拜登获胜!硅谷的Python开发者用这种方式调侃懂王
- Impact of libssl on CentOS login
- On the calculation of non interaction polarizability
- Nine kinds of distributed primary key ID generation schemes of sub database and sub table are quite comprehensive
猜你喜欢
inet_ Pton () and INET_ Detailed explanation of ntop() function
android studio创建平板模拟器方法
Program life: from Internet addicts to Microsoft, bat and byte offer harvesters
Mapstructure detoxifies object mapping
Nine kinds of distributed primary key ID generation schemes of sub database and sub table are quite comprehensive
嗯,查询滑动窗口最大值的这4种方法不错...
Using rem, the font size changes when the screen zooms
Android Development - service application, timer implementation (thread + service)
Fedora 33 Workstation 的新功能
开源ERP招聘了
随机推荐
外贸自建网站域名的选择— Namesilo 域名购买
安卓开发——服务应用,计时器的实现(线程+服务)
阿里、腾讯、百度、网易、美团Android面试经验分享,拿到了百度、腾讯offer
微信圈子
iPhone“连到系统上的设备没有发挥作用”原因分析及解决方法 20200105
Android权限大全
EFF 认为 RIAA 正在“滥用 DMCA”来关闭 YouTube-DL
开源 | HMGNN:异构小图神经网络及其在拉新裂变风控场景的应用
Glsb involves load balancing algorithm
AI fresh student's annual salary has increased to 400000, you can still make a career change now!
Using rem, the font size changes when the screen zooms
After SQL group query, get the first n records of each group
Depth analysis based on synchronized lock
SQL Chapter 2 Chapter 3
嘉宾专访|2020 PostgreSQL亚洲大会阿里云数据库专场:樊文凯
vscode 插件配置指北
《内网安全攻防》配套视频 之 利用PS查询域内信息
Large scale project Objective-C - nsurlsession access SMS verification code application example sharing
Fedora 33 Workstation 的新功能
用一种简单的方式实现终端文字粘贴板