首先创建模型类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. 刚学spark

    https://blog.csdn.net/u013019431/article/details/80776662   在jupyter notebook import pysparkhttps:// ...

  2. Python--数据存储

    新建测试文档测试.txt内容如下: 张三:今天天气真好. 李四:是的,真的太好了. 张三:阳光明媚. 李四:鸟语花香. 王五:装逼现场:请带好安全帽 张三:难得好天气,今天就不偷懒了. 李四:能把乞讨 ...

  3. Spring系列之HikariCP连接池

    上两篇文章,我们讲到了Spring中如何配置单数据源和多数据源,配置数据源的时候,连接池有很多选择,在SpringBoot 1.0中使用的是Tomcat的DataSource,在SpringBoot ...

  4. NOIP 模拟 $23\; \rm 联$

    题解 \(by\;zj\varphi\) 区间上的问题,一般都用线段树来解决(但是这题也可以用 \(\rm ODT\)) 对于每段段区间设置三个参数,分别表示这个区间是否只有 \(1\) 或 \(0\ ...

  5. Mybatis-Plus入门学习笔记(一)

    本文内容 了解Mybatis-Plus 整合Mybatis-Plus 1.了解Mybatis-plus 1.1.Mybatis-Plus介绍 MyBatis-Plus(简称 MP)是一个 MyBati ...

  6. The requested PHP extension ext-http * is missing from your system. Install or enable PHP's http ex

    composer.json 包含 "require": { "ext-http": "*" } 删掉  "ext-http&quo ...

  7. 初识nest.js

    nest的核心概念: Nest的核心概念是提供一种体系结构,它帮助开发人员实现层的最大分离,并在应用程序中增加抽象. 架构预览: 主要有三个核心概念:模块Module,  控制器Controller, ...

  8. bootstrap 冻结表格,冻结表头

    需要的文件下载: bootstrap-table:https://github.com/wenzhixin/bootstrap-table bootstrap-table-fiex-column:ht ...

  9. .Net Core NPOI读取Excel 并转为数据实体类

    创建应用程序 这里直接创建Console程序 引用NPOI的NuGet包 PM> Install-Package NPOI -Version 2.5.1 直接Nuget包管理器添加 导入Exce ...

  10. WPF : ControlTemplate和DataTemplate的区别

    ControlTemplate用于描述控件本身. 使用TemplateBinding来绑定控件自身的属性, 比如{TemplateBinding Background}DataTemplate用于描述 ...