首先创建模型类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# 递归树形菜单的更多相关文章

  1. java递归树形菜单显示

    今天写权限整好涉及到一些菜单的显示,最先想到的是递归遍历输出,但是呢在网上找了很多有关的资料没有符合自己需求的所以就自己写了一个,如果觉得靠谱 请点点关注!!!赞一个 首先看一些设计的数据库设计 菜单 ...

  2. Vue.js 递归组件实现树形菜单

    最近看了 Vue.js 的递归组件,实现了一个最基本的树形菜单. 项目结构: main.js 作为入口,很简单: import Vue from 'vue' Vue.config.debug = tr ...

  3. treeview树形菜单,递归

    我使用的是递归是实现无限级树形菜单: using System; using System.Collections; using System.Configuration; using System. ...

  4. java构建树形菜单递归工具类

    1.设计菜单实体 import java.util.List; public class Menu { //菜单id private Long id; //父节点id private Long par ...

  5. 用Vue.js递归组件构建一个可折叠的树形菜单

    在Vue.js中一个递归组件调用的是其本身,如: Vue.component('recursive-component', {   template: `<!--Invoking myself! ...

  6. Vue.js递归组件实现动态树形菜单

    使用Vue递归组件实现动态菜单 现在很多项目的菜单都是动态生成的,之前自己做项目也是遇到这种需求,翻看了官网案例,和网上大神的案例.只有两个感觉,官网的案例太简洁,没有什么注释,看起来不太好理解,大神 ...

  7. PHP递归获得树形菜单和遍历文件夹下的所有文件以及子文件夹

    PHP递归获得树形菜单和遍历文件夹下的所有文件以及子文件夹 一.使用递归获取树形菜单 数据表category(id,name,parent_id) <?php class category{ / ...

  8. Python 递归返回树形菜单JSON串 <flask>

    需求:菜单管理功能(增.删.改),多级树形菜单展示 数据库表设计 create table if not exists Menu( id serial primary key , title ) no ...

  9. WEB开发中前后台树形菜单的展示设计

    在WEB开发中经常需要进行树形菜单的展示,本例通过不同角度的总结了如下三种实现方式: 通过JS的递归实现前端菜单DOM的动态创建 通过JSP的include指令结合JSTL表达式语言递归实现菜单的展示 ...

随机推荐

  1. Android ELF文件解析

    0X01  ELF初认识 elf文件是linux下的二进制文件,相当于windows下的PE文件,Android系统里的dll. 解析elf文件两个用处:1.so加固:2.frida(xposed)检 ...

  2. 腾讯技术团队整理,为什么 Flutter 能最好地改变移动开发

    导语 | Flutter 框架是当下非常热门的跨端解决方案,能够帮助开发者通过一套代码库高效构建多平台精美应用,支持移动.Web.桌面等多端开发.但仍然有很多产品.设计.甚至开发同学并不了解 Flut ...

  3. webservice接口调用

    package com.montnets.emp.sysuser.biz; import org.apache.axis.client.Call; import org.apache.axis.cli ...

  4. Linux常见问题解决方案

    1.Kali2020添加BCM43142的网卡驱动 来源:https://www.fujieace.com/kali-linux/wifi-drive.html 我只是执行了第三步:安装网卡驱动,即: ...

  5. Create Shortcut for SSH Hosts

    You frequently visit host 10.0.7.141 for example. It's a waste to type "ssh gcp@10.0.7.141" ...

  6. [WPF] 使用 MVVM Toolkit 构建 MVVM 程序

    1. 什么是 MVVM Toolkit 模型-视图-视图模型 (MVVM) 是用于解耦 UI 代码和非 UI 代码的 UI 体系结构设计模式. 借助 MVVM,可以在 XAML 中以声明方式定义 UI ...

  7. EasyExcel导入导出

    maven依赖 <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --> <dependency> & ...

  8. SQL 练习20

    查询各科成绩前三名的记录 select a.sid,a.cid,a.score from sc a left join sc b on a.cid = b.cid and a.score<b.s ...

  9. mysql自带分区(不修改源码)

    SELECT PARTITION_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 'xw_user_appl ...

  10. RestTemplate post请求 Controller 接收不到值的解决方案 postForObject方法源码解析

    springboot 整合 RestTemplate 与 使用方法 RestTemplate 的 postForObject 方法有四个参数 String url => 顾名思义 这个参数是请求 ...