做角色菜单权限时用到treeview控件做树状显示菜单,简单总结了一下用法:

1.在winform窗体中拖入treeview控件,注意修改属性CheckBoxes属性为true,即在节点旁显示复选框

2.后台动态加载数据库数据绑定到treeview上,子节点使用递归添加

代码如下:

//循环添加treeview节点

for (int i = ; i < dm.Rows.Count - ; i++)//dm是数据库查出的数据表

{

//添加父节点(一级菜单)

if (int.Parse(dm.Rows[i]["Menu_Type"].ToString()) == )

{

TreeNode pnode = new TreeNode();

pnode.Text = dm.Rows[i]["Menu_Text"].ToString();

pnode.Tag = int.Parse(dm.Rows[i]["Menu_ID"].ToString());

treeView1.Nodes.Add(pnode);

//调用方法,添加子级菜单

AddChildnode(int.Parse(dm.Rows[i]["Menu_ID"].ToString()), pnode);

}

}

添加子级菜单的方法如下:

public void AddChildnode(int mid, TreeNode pnode)

{

RoleHandle rh = new RoleHandle();

DataTable dm = rh.Menu_Texts_Type();

for (int i = ; i < dm.Rows.Count - ; i++)

{

if (int.Parse(dm.Rows[i]["Menu_Parent"].ToString()) == mid)

{

TreeNode cnode = new TreeNode();

cnode.Text = dm.Rows[i]["Menu_Text"].ToString();

cnode.Tag = int.Parse(dm.Rows[i]["Menu_ID"].ToString());

pnode.Nodes.Add(cnode);

//调用本方法,递归

AddChildnode(int.Parse(dm.Rows[i]["Menu_ID"].ToString()), cnode);

}

}

}

3.获取角色对应的权限,有权限则勾选,没有权限则不管

我同样封装了一个方法,方法代码如下:

private void RoleChanged()

{

RoleHandle rh = new RoleHandle();

int roleId = GetSelectedRoleId();

//循环遍历treeview1所有根节点

for (int i = ; i < treeView1.Nodes.Count; i++)

{

//查询数据库判断是否有该权限

if (rh.RoleMenuCheck(int.Parse(treeView1.Nodes[i].Tag.ToString()), roleId) != null && rh.RoleMenuCheck(int.Parse(treeView1.Nodes[i].Tag.ToString()), roleId).Rows.Count > )

{

//如果有权限,则勾选该节点

treeView1.Nodes[i].Checked = true;

}

else

{

treeView1.Nodes[i].Checked = false;

}

//调用递归的方法判断其子节点

TreeViewAllNodes(treeView1.Nodes[i], roleId);

}

}

判断子节点菜单是否有权限的方法(即判断子节点是否应勾选)

private void TreeViewAllNodes(TreeNode parentNode, int roleId)

{

RoleHandle rh = new RoleHandle();

foreach (TreeNode node in parentNode.Nodes)

{

if (rh.RoleMenuCheck(int.Parse(node.Tag.ToString()), roleId) != null && rh.RoleMenuCheck(int.Parse(node.Tag.ToString()), roleId).Rows.Count > )

{

node.Checked = true;

}

else

{

node.Checked = false;

}

if (node.Nodes.Count > )//如果该节点下还有子节点

{

//运用递归,调用改方法

TreeViewAllNodes(node, roleId);

}

}

}

4.使用鼠标单击treeview节点事件,实现点击某treeview节点时的子节点和父节点联动,代码如下:

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)

{

//判断该节点状态(展开或折叠)

if (nodestate)

{

TreeNode node = e.Node;

if (node.Nodes.Count > )//包含子节点,实现子级联动

{

//实现子级联动的方法

SetTreeViewChecked(node);

}

if (node.Parent != null)//有父级菜单,实现父级联动

{

//实现父级联动的方法

SetParentNodeState(node);

}

nodestate = false;//修改节点状态

}

}

子级联动的方法如下:

private void SetTreeViewChecked(TreeNode node)

{

if (node == null)

{

return;

}

if (node.Nodes.Count > )//判断该节点下有子节点

{

foreach (TreeNode item in node.Nodes)

{

item.Checked = node.Checked;

//调用该方法,递归

SetTreeViewChecked(item);

}

}

}

父级联动方法如下:

private void SetParentNodeState(TreeNode node)

{

//定义变量用来设置父节点的选中情况,bool ck = false;假设子节点为全不选情况

bool ck = false;

TreeNode pn = node.Parent;

if (pn != null)

{

//假设所有子节点为全未选,循环判断是否有子节点选中

foreach (TreeNode item in pn.Nodes)

{

//如果有一个子节点是选中的,ck=true;

if (item.Checked)

{

ck = true;

break;

}

}

if (ck)

{

pn.Checked = true;

}

else

{

pn.Checked = false;

SetParentNodeState(pn);//递归

}

}

}

补充说明一下,鼠标单击treeview节点事件有点坑,折叠或展开节点时也会触发该事件,所以我使用了TreeView1_AfterCheck事件解决了这个问题

//设置全局变量,用来接收节点的状态

private bool nodestate = false;

private void RoleMenuForm_Load(object sender, EventArgs e)

{

//在窗体加载事件中注册方法treeView1.AfterCheck

treeView1.AfterCheck += TreeView1_AfterCheck;

}

//treeView1.AfterCheck方法

private void TreeView1_AfterCheck(object sender, TreeViewEventArgs e)

{

//改变节点状态

nodestate = true;

}

Winform TreeView控件技巧

在开发的时候经常使用treeview控件来显示组织结构啊,目录结构啊,通常会结合属性checkedboxs,来做选中,取消的操作下面是一个选中,取消的小例子,选中节点的时候,如果节点存在子节点,可以选 ...

Winform - TreeView控件,只展开根目录

TreeNode类型是有Expand和ExpandAll这两个方法.而Treeview是只有ExpandAll的,想要展开根目录下面的节点的话 //只展开根目录 ) ].Expand();

WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色

本文转载:http://www.cnblogs.com/umplatform/archive/2012/08/29/2660240.html 在B/S开发中,对TreeView控件要改变当前选中节点的 ...

Winform中Treeview控件失去焦点,将选择的节点设置为高亮显示 &lpar;2012-07-16 13&colon;47&colon;07&rpar;转载▼

Winform中Treeview控件失去焦点,将选择的节点设置为高亮显示 (2012-07-16 13:47:07)转载▼标签: winform treeview drawnode Treeview控 ...

C&num;Winform中treeView控件使用总结

1.如何展开结点时改变图标(注意:不是选中时) 要在目录中使用图标首先要加入一个控件ImageList(命名为imageList1),然后可以按图片的index或名称引用图片. 然后需要在TreeVi ...

C&num; TreeView 控件的综合使用方法

1.概述 该篇文章开发使用的语言c#,环境visualstudio2010,sql数据库.主要内容包括: (1)treeView控件添加根节点.子节点的基本方法,节点的删除. (2)把treeView ...

C&num;编程,TreeView控件的学习

新建一个WinForm项目之后,在窗体中放入一个treeView控件(treeView1),根据数据库数据填充建立树节点.数据库的结构如下: ID        Title        P_ID a ...

如何:使用TreeView控件实现树结构显示及快速查询

本文主要讲述如何通过使用TreeView控件来实现树结构的显示,以及树节点的快速查找功能.并针对通用树结构的数据结构存储进行一定的分析和设计.通过文本能够了解如何存储层次结构的数据库设计,如何快速使用 ...

随机推荐

TCP&sol;IP协议与UDP协议的区别

TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接.一个TCP连接必须要经过三次“对话”才能建立起来, ...

OC中如何把数组中字典的数据转换成URL&quest;

在使用objective-c语言开发iOS应用中,会向服务器通过URL请求一些数据,因此对URL的拼接肯定少不了.而在iOS中,我们一般是通过将字典中的数据拼接成我们要请求的URL字符串,那这个是怎么 ...

UVA 1252&Tab; 十五 Twenty Questions

十五 Twenty Questions Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submi ...

&lbrack;译&rsqb;MongoDB 3&period;0发布说明

原文来自:http://docs.mongodb.org/manual/release-notes/3.0/ 2015年3月3日 MongoDB 3.0现已可供使用.关键新特性包括支持WiredTig ...

基类和派生类--this

基类指针在程序运行的时候的确指向的是一个派生类的对象,但指针的类型仍然是基类指针.C++是一种强类型语言,因此不能用基类指针类型的指针直接调用派生类:而且,同一个类可能有多种不同的派生类,因此不知道实 ...

Eclipse添加Spket插件实现ExtJs智能提示

1 . 开发环境 MyEclipse 12.0.0 ExtJs 4.2.1.883 Spket 1.6.23 2 . 下载资源 extjs 4.2.1.883 - http://www.sencha. ...

Shell编程初步

一:Hello World 新建一个文件,命名时以 .sh 为后缀.每个bash文件开头第一行表名文件类型: #!/bin/bash 然后在下面输入代码. 比如输出hello world: #!/ ...

JavaScript运算符与类型

1.运算符优先级 首先讲一下运算符的优先级,它决定了表达式中运算执行的先后顺序,优先级高的运算符最先被执行. 下面的表将所有运算符按照优先级的不同从高到低排列: 优先级 运算类型 关联性 运算符 19 ...

c&plus;&plus;中类的静态数据成员

有时需要为某个类的所有对象分配一个单一的存储空间,这个存储空间只是被这个类的对象访问,其他人不能访问,那么这时静态的成员变量是有用的.例如下面用来统计一共创建了多少个对象的变量num class cl ...

hdu 5692&lpar;dfs序&plus;线段树&comma;好题&rpar;

Snacks Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

python treeview控件使用详解_winform Treeview控件使用相关推荐

  1. android控件使用大全,Android常见控件使用详解

    本文实例为大家分享了六种Android常见控件的使用方法,供大家参考,具体内容如下 1.TextView 主要用于界面上显示一段文本信息 2.Button 用于和用户交互的一个按钮控件 //为Butt ...

  2. Flash播放控件属性详解

    Flash 播放控件属性详解 一.属性篇 1.AlignMode(读写)  语法:AlignMode As Long  说明:对齐方式(与SAlign 属性联动).当控件的长宽比例与影片不一致且WMo ...

  3. C#Winform的DataGridView控件使用详解2—DataGridView表格样式设置及表格操作

    C#Winform的DataGridView控件使用详解2-DataGridView表格样式设置及表格操作 DataGridView表格样式设置 DataGridView行序号设置 右键弹出控件表格操 ...

  4. QT QLabel控件(使用详解)

    本文详细的介绍了TextLabel控件的各种操作,例如:显示边框.设置文字.设置字体.设置信息提示框.状态提示.居中对齐.加载图片.自适应图片大小.设置位置大小.样式表等操作. 本文作者原创,转载请附 ...

  5. QT QTabWidget 控件 使用详解

    本文详细的介绍了QTabWidget控件的各种操作,例如:新建界面.设置页面名字.设置提示信息.设置页面激活.设置标题栏位置.设置页面关闭按钮.设置页面关闭按钮.获取页面下标.获取页面总数.清空所有页 ...

  6. VB6.0 ActiveX 控件开发详解 [第一章:创建工程]

    前言 在CSDN的VB论坛上,我总是能够看见有人这样问"有没有这样的控件,一个列表框,每一个项前面有一个按钮"(这是例子),又或者见到这样:"怎么样做一个ActiveX控 ...

  7. C#Winform的DataGridView控件使用详解1—七种DataGridViewColumn类型使用方法

    C#Winform的DataGridView控件使用详解1-七种DataGridViewColumn类型使用方法 DataGirdView控件Column类型 DataGridViewButtonCo ...

  8. QT QSpinBox 整数计数器控件 使用详解

    本文详细的介绍了QSpinBox控件的各种操作,例如:获取数值.设置前后缀.设置最大/小值.进制转换.关联信号槽.优化信号.QSS优化.文件源码.样式表 .效果:可以设置背景.边框.向上按钮.向下按钮 ...

  9. Python的C语言接口 - 详解官方文档

    Python的C语言接口 - 详解官方文档 索引 Python的C语言接口 - 详解官方文档 介绍 / Introduce 代码标准 / Coding Standards 包含文件 / Include ...

  10. python编程入门与案例详解-quot;Python小屋”免费资源汇总(截至2018年11月28日)...

    原标题:"Python小屋"免费资源汇总(截至2018年11月28日) 为方便广大Python爱好者查阅和学习,特整理汇总微信公众号"Python小屋"开通29 ...

最新文章

  1. 第九代小冰惊喜登场,多端融合且琴棋书画样样精通
  2. 网络传输大端序_基于大端法、小端法以及网络字节序的深入理解
  3. ArcGIS JavaScript API 实现基本的地图功能
  4. js 字符串加减法_JavaScript (+) 加法运算符
  5. LSTM拟合正弦曲线代码(转载)
  6. k8s Pod亲和性:pod与pod的亲和性
  7. wpf 在另一个窗体上显示_另一个唐伯虎:大街上裸身奔跑、锒铛入狱多次自裁未遂...
  8. Redis持久化-深入理解AOF,RDB
  9. iOS linker command failed with exit code 1 (use -v to see invocation)多种解决方案汇总
  10. verilog异步复位jk触发器_HDLBits: 在线学习Verilog(Problem 120-126)
  11. 头条搜索发布2020年十大流行语:逆行者、集美、后浪位列前三
  12. Java Applet 授权命令
  13. 2021 年全国大学生电子设计竞赛实施过程说明
  14. springBoot整合redis使用介绍(详细案例)
  15. 【信息系统项目管理师】2018下半年系统集成项目管理工程师案例分析
  16. 安卓搜不到airpods_airpods忽略设备后再也搜不到了怎么办
  17. python中文相似度_python文本相似度计算
  18. MATLAB 赋值具有的非单一 rhs 维度多于非单一下标数
  19. ZOJ 1516 Uncle Tom's Inherited Land
  20. 计算机专业大学生每天睡多久,大学睡眠时间最少的10大专业,没想到第一名竟是......

热门文章

  1. Invest授粉模型问题求助
  2. Android Studio中竟然还能加入一个程序员鼓励师
  3. textview 属性大全
  4. 高中计算机生涯规划,计算机职业生涯规划书
  5. QT通过ODBC连接MySQL数据库
  6. 电视助手 Android,无屏助手TV版|无屏助手电视版 V4.0.3 安卓版 下载_当下软件园_软件下载...
  7. sodp软件如何导入多个工作面信息_6款堪称业界良心的软件,好用到想为它们疯狂打call!...
  8. 学习笔记(3):《微电子器件》陈星弼(第四版)第1章 半导体物理基础及基本方程
  9. 计算机绘图相切,第九章计算机绘图基础.
  10. 穿墙贪吃蛇(C语言)