当前位置:网站首页>使用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
边栏推荐
- Mapstructure detoxifies object mapping
- inet_ Pton () and INET_ Detailed explanation of ntop() function
- 大型项目Objective-C - NSURLSession接入短信验证码应用实例分享
- Solve the problem of idea shortcut key Alt + insert invalid
- Fedora 33 Workstation 的新功能
- Gather in Beijing! Openi / O 2020 Qizhi Developer Conference enters countdown
- PAT_甲级_1074 Reversing Linked List
- Visit Jingdong | members of Youth Innovation Alliance of China Academy of space technology visit Jingdong headquarters
- Understanding task and async await
- 配置交换机Trunk接口流量本地优先转发(集群/堆叠)
猜你喜欢
JVM学习(五) -执行子系统
深圳C1考证历程
走进京东 | 中国空间技术研究院青年创新联盟成员莅临参观京东总部
Impact of libssl on CentOS login
In the future, China Telecom will make cloud computing service the main business of China Telecom
Download Netease cloud music 10W + music library with Python
AI应届生年薪涨到40万了,你现在转行还来得及!
Learning notes of nodejs
Analysis of the source code of ThinkPHP facade
vscode 插件配置指北
随机推荐
Learning notes of nodejs
git 删除iml文件
10款必装软件,让Windows使用效率飞起!
SQL statement to achieve the number of daffodils
Using rem, the font size changes when the screen zooms
分库分表的 9种分布式主键ID 生成方案,挺全乎的
走进京东 | 中国空间技术研究院青年创新联盟成员莅临参观京东总部
大型项目Objective-C - NSURLSession接入短信验证码应用实例分享
解决IDEA快捷键 Alt+Insert 失效的问题
Front end code style practice prettier + eslint + git hook + lint staged
Wechat circle
Understanding data structures starts with this article~
Dynamo: a typical distributed system analysis
线上服务的FGC问题排查,看这篇就够了!
for与for...in、for Each和map和for of
A simple way to realize terminal text paste board
向北京集结!OpenI/O 2020启智开发者大会进入倒计时
《内网安全攻防》配套视频 之 利用PS查询域内信息
TiDB x 微众银行 | 耗时降低 58%,分布式架构助力实现普惠金融
Gather in Beijing! Openi / O 2020 Qizhi Developer Conference enters countdown