c# 递归树形菜单
首先创建模型类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); //递归调用自己,直到父节点添加所有子节点结束
}
}
效果展示
c# 递归树形菜单的更多相关文章
- java递归树形菜单显示
今天写权限整好涉及到一些菜单的显示,最先想到的是递归遍历输出,但是呢在网上找了很多有关的资料没有符合自己需求的所以就自己写了一个,如果觉得靠谱 请点点关注!!!赞一个 首先看一些设计的数据库设计 菜单 ...
- Vue.js 递归组件实现树形菜单
最近看了 Vue.js 的递归组件,实现了一个最基本的树形菜单. 项目结构: main.js 作为入口,很简单: import Vue from 'vue' Vue.config.debug = tr ...
- treeview树形菜单,递归
我使用的是递归是实现无限级树形菜单: using System; using System.Collections; using System.Configuration; using System. ...
- java构建树形菜单递归工具类
1.设计菜单实体 import java.util.List; public class Menu { //菜单id private Long id; //父节点id private Long par ...
- 用Vue.js递归组件构建一个可折叠的树形菜单
在Vue.js中一个递归组件调用的是其本身,如: Vue.component('recursive-component', { template: `<!--Invoking myself! ...
- Vue.js递归组件实现动态树形菜单
使用Vue递归组件实现动态菜单 现在很多项目的菜单都是动态生成的,之前自己做项目也是遇到这种需求,翻看了官网案例,和网上大神的案例.只有两个感觉,官网的案例太简洁,没有什么注释,看起来不太好理解,大神 ...
- PHP递归获得树形菜单和遍历文件夹下的所有文件以及子文件夹
PHP递归获得树形菜单和遍历文件夹下的所有文件以及子文件夹 一.使用递归获取树形菜单 数据表category(id,name,parent_id) <?php class category{ / ...
- Python 递归返回树形菜单JSON串 <flask>
需求:菜单管理功能(增.删.改),多级树形菜单展示 数据库表设计 create table if not exists Menu( id serial primary key , title ) no ...
- WEB开发中前后台树形菜单的展示设计
在WEB开发中经常需要进行树形菜单的展示,本例通过不同角度的总结了如下三种实现方式: 通过JS的递归实现前端菜单DOM的动态创建 通过JSP的include指令结合JSTL表达式语言递归实现菜单的展示 ...
随机推荐
- AJAX的学习与使用>前端技术系列
目录 AJAX的学习与使用 什么是AJAX 为什么要使用AJAX AJAX接收服务器响应数据的3种格式 文本格式(重要) JSON格式(重要) 服务器端响应实体类JSON格式的3种方式 修改实体类的t ...
- 大数据开发-Go-新手常遇问题
真正在工作中用Go的时间不久,所以也作为新手,总结了一些常见的问题和坑 Go 中指针使用注意点 // 1.空指针反向引用不合法 package main func main() { var p *in ...
- 手写Pascal解释器(一)
目录 一.编写解释器的动机 二.part1 三.part2 四.part3 一.编写解释器的动机 学习了Vue之后,我发现对字符串的处理对于编写一个程序框架来说是非常重要的,就拿Vue来说,我们使用该 ...
- 53. 最大子序和(剑指 Offer 42)
53. 最大子序和(剑指 Offer 42) 知识点:数组:前缀和:哨兵:动态规划:贪心:分治: 题目描述 输入一个整型数组,数组中的一个或连续多个整数组成一个子数组.求所有子数组的和的最大值. 要求 ...
- 字节跳动Android春招,三轮面试,夺命连环问,心态崩了
我是春招参加字节面试的,现在已经入职俩月啦,当时没有及时记录下来拖到现在...我尽量回忆当时的内容希望能帮到大家. 投的部门是深圳字节影像,不得不说这个部门的效率,上午投下午就接到hr的电话约面试时间 ...
- 构建工具之Maven的使用(一)
一.前言 对于开发一个Java项目,上线之前会通过编译,测试,打包,部署这几个构建过程,如果文件较少,我们可以使用java-->javac-->jar这些命令去完成上述的构建流程.但是当工 ...
- Linux下基于SQLite3 实现商店商品管理系统
文章目录 一.SQLite相关C接口 重要接口 打开数据库 插入信息 查询 二.程序要求 三.程序说明 四.实现代码 水果店账单管理系统 一.SQLite相关C接口 如果第一次直接在命令行安装sqli ...
- 在WPF中的ItemsControl中使用事件和命令(Using events and Commands within ItemsControl in WPF)
Say I have a standard WPF ItemsControl bound to an ObservableCollection of "Dog" objects l ...
- 使用JS获取SessionStorage的值
参考:https://www.jb51.net/article/132729.htm 获取sessionStorage的意义 首先获取它是为了将获得的信息输出或者alert():让人容易看到, 其次, ...
- qt 中的自定义pushbutton