精华内容
下载资源
问答
  • 做角色菜单权限时用到treeview控件做树状显示菜单,简单总结了一下用法:1.在winform窗体中拖入treeview控件,注意修改属性CheckBoxes属性为true,即在节点旁显示复选框2.后台动态加载数据库数据绑定到treeview上,...

    做角色菜单权限时用到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 ...

    展开全文
  • TreeView控件可以通过HierarchicalDataTemplate 和DataTemplate来自定义。1)HierarchicalDataTemplate用来支持HeaderedItemsControl,其中DataType指定当前的数据类型, 只有符合这个类型才使用...

    TreeView控件可以通过HierarchicalDataTemplate 和 DataTemplate来自定义。

    1)HierarchicalDataTemplate用来支持HeaderedItemsControl,其中DataType指定当前的数据类型, 只有符合这个类型才使用HierarchicalDataTemplate;ItemsSource用来指定ItemsHost;内部的自定义实现(TextBlock)指定当前数据类型如何渲染,注意:不是子节点。

    ItemsSource = "{Binding Path=Divisions}">

    2)对于TreeView控件, 我们可以只指定一个HierarchicalDataTemplate, 而保证数据结构每层的ItemSource的类型名一样, 每层的数据层需要渲染的数据一样。

    public class Node

    {

    public string Name {get; set;}

    public string Id {get; set;}

    public List Nodes {get; set;}

    }

    3)另外一种就是如1)所示, 我们可以针对每层的数据层指定HierarchicalDataTemplate,

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Title="HierarchicalDataTemplate Sample"

    xmlns:src="clr-namespace:SDKSample">

    ItemsSource = "{Binding Path=Divisions}">

    ItemsSource = "{Binding Path=Teams}">

    ItemsSource="{Binding Source={StaticResource MyList}}" />

    展开全文
  • https://www.xin3721.com/eschool/TreeView控件的实例代码,需要的朋友可以参考下。当前选中项:TreeView.SelectedNode增加顶级节点:TreeView.Nodes.Add("Key", "Text")增加同级节点:TreeView.SelectedNode.Parent...

    https://www.xin3721.com/eschool/

    TreeView控件的实例代码,需要的朋友可以参考下。

    当前选中项:TreeView.SelectedNode

    增加顶级节点:TreeView.Nodes.Add("Key", "Text")

    增加同级节点:TreeView.SelectedNode.Parent.Nodes.Add("Key", "Text")

    增加子节点:TreeView.SelectedNode.Nodes.Add("Key", "Text")

    全部展开:TreeView.ExpandAll()

    全部收拢:TreeView.CollapseAll()

    重新设置TreeView

    数据库表结构为: ID 类型名称 父级ID

    复制代码 代码如下:

    private void loadTreeView()

    {

    this.货品类别TableAdapter1.Fill(superCargoDataSet1.货品类别);

    DataTable table = superCargoDataSet1.货品类别;

    DataRow[] row = table.Select("父级ID=0");

    foreach (DataRow r in row)

    {

    TreeNode node = 货品类别TreeView.Nodes.Add(r["ID"].ToString(), r["类型名称"].ToString());

    recursionShow(node, r["ID"].ToString());

    }

    }

    private void recursionShow(TreeNode nodes, string id)

    {

    DataTable table = superCargoDataSet1.货品类别;

    DataRow[] row = table.Select("父级ID=" + id);

    if (row != null)

    {

    foreach (DataRow r in row)

    {

    TreeNode node = nodes.Nodes.Add(r["ID"].ToString(), r["类型名称"].ToString());

    recursionShow(node, r["ID"].ToString());

    }

    }

    }

    删除选中节点和其子结点,同时删除数据库中相应记录

    数据库表结构为: ID 类型名称 父级ID

    复制代码 代码如下:

    private void 删除ToolStripButton_Click(object sender, EventArgs e)

    {

    if (货品类别TreeView.SelectedNode != null)

    {

    DataRow[] rowChildren = superCargoDataSet1.货品类别.Select("ID=" + 货品类别TreeView.SelectedNode.Name.ToString());

    if (rowChildren != null)

    {

    foreach (DataRow row in rowChildren)

    {

    delete节点(row["ID"].ToString());

    row.Delete();

    }

    }

    货品类别TreeView.SelectedNode.Remove();

    }

    }

    private void delete节点(string id)

    {

    DataRow[] rowChildren = superCargoDataSet1.货品类别.Select("父级ID=" + id);

    if (rowChildren != null)

    {

    foreach (DataRow row in rowChildren)

    {

    delete节点(row["ID"].ToString());

    row.Delete();

    }

    }

    }

    TreeView右键选中

    复制代码 代码如下:

    private void treeView左侧_MouseDown( object sender , MouseEventArgs e )

    {

    if( e.Button == MouseButtons.Right )

    {

    TreeNode node = treeView左侧.GetNodeAt (e.X , e.Y);

    if( node != null )//右键未选中节点,不改变当前选中的节点。VS2005如此。

    {

    this.treeView左侧.SelectedNode = node;

    }

    }

    }

    展开全文
  • 《VFP-TreeView控件使用详解word版》下载地址:网盘下载 转载于:https://www.cnblogs.com/long12365/p/9731425.html
  • 副标题:在WPF中快速显示XML文件介绍 在本文中,我将描述如何在WPF应用程序中使用TreeView控件显示包含在简单XML文件中的数据,而无需编写任何代码。在本文中,所有的内容都可以在定义窗口内容的XAML文件中找到。...
  • 三小时快速掌握 TreeView树状控件的...比如TREEVIEW控件TREEVIEW控件,也叫树控件,主要用于层级显示和控制,应用广泛。我一 直很想学习这个控件的使用,但每次都没有学成,总感觉很难。前几天有空,狠下心来将...
  • 找半天找到个参考:https://stackoverflow.com/questions/32511843/delete-and-edit-items-in-treeview-tkinter对于你的代码:importtkinterfromtkinterimportttk#导入内部包li=['王记','12','男']root=tkinter.Tk()...
  • VB TreeView控件使用详解

    千次阅读 2014-04-15 18:21:00
    三小时快速掌握TreeView树状控件的使用。能不能掌握控件的使用,是业余向准专业进步的关键。虽然我本人不太喜欢用控件,因为基于不同的操作环境成品后效果很难保证。...比如TREEVIEW控件TREEVIEW控件,也叫树控...
  • Treeview是Tkinter8.5新引入的控件,可以用于实现较为复杂的GUI界面。本文使用一个FileBrowser实例来说明它的用法。 构建主窗口和退出菜单的代码和前一篇文章几乎相同:root = Tk()root.title('Tkinter Treeview and...
  • 写在前面:UE4自身封装了ListView,在此基础上封装了TreeView.极大的提高了开发者开发...使用说明(由c++编写) TreeView继承自ListView,因此,添加Item的方式和ListView一致。如下图. TreeView有一个关键委托,当点击I...
  • 功能:class 中实现了滚动控件创建、treeview控件创建、treeview数据写入 模块的集成 创建滚动条和创建treeview可以有一行脚本实现与控制。 在给tree写入数据时,分两种情形: 一种是 给树形tree中添加元素,show='...
  • 今天刚好有一个学员问了TreeView 的两个问题,刚好觉得很有代表性,回复了他的问题后整理出来,分享给各位同学:问题一:TreeView控件在哪里能找到? 这个问题我当时听了感觉是一口老血要喷出来,反过来一想,或者...
  • 作者:Zarten知乎专栏:Python爬虫深入详解知乎ID: Zarten简介: 互联网一线工作者,尊重原创并欢迎评论留言指出不足之处,也希望多些关注和点赞是给作者最好的鼓励 !介绍Redis是一个开源的基于内存也可持久化的...
  • 前几天学习了一下python的turtle库,它是python中一个绘制图像的函数库,用海龟可以画出各种图像,学习之后我画了可爱的小黄人,和太阳等图案,觉得很好玩很有趣,在这里想介绍一下turtle的使用详解,感兴趣或者需要...
  • python 网页解析器 1、常见的python网页解析工具有:re正则匹配、python自带的html.parser模块、第三方库BeautifulSoup(重点学习)以及lxm库。 2、常见网页解析器分类 (1)模糊匹配 :re正则表达式即为字符串式的...
  • <html><head><title>The Dormouse's storytitle>head><body><p class="title" name="dromouse"><b>The Dormouse's storyb>p><p class="story">Once upo...
  • 树图在使用Treeview控件时,经常要遍历其所以节点。Treeview控件本身没有这个功能。这里我们利用递归方法,实现GetAllNodes()函数来获得根所有根节点下的节点。返回值为节点列表,函数为静态。我们可以把这两个函数...
  • 引导是带领用户更快速更愉悦地达到目标的过程,能在用户使用产品功能前或遇到障碍之前给予及时的引导提示。...3种类型的引导各有各自的特点以及使用场景,本篇文章详解组件控件结构体系—引导类...
  • 先上图再上代码:import ttkfrom Tkinter import *root = Tk()tree = ttk.Treeview(root, columns=('col1','col2','col3'))tree.column('col1', width=100, anchor='center')tree.column('col2', width=100, anchor=...
  • PyQt5基础1.1 GUI编程学什么大致了解你所选择的GUI库基本的程序的结构:使用这个GUI库来运行你的GUI程序各种控件的特性和如何使用控件的样式资源的加载控件的布局事件和信号动画特效界面跳转设计工具的...
  • server类socketserver包提供5个Server类,这些单独使用这些Server类都只能完成同步的操作,他是一个单线程的,不能同时处理各个客户端的请求,只能按照顺序依次处理。+------------+ | BaseServer | +------------+ ...
  • 使用这些Qt布局管理类的另一个原因是,在程序、系统改变字体,语言或者在不同的平台上运行时,布局管理器能够自动调整窗体里所有控件的大小和尺寸。 其他可进行布局管理的类:这些类的共同特点是提供了更加灵活的...
  • 一、基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不... 转自:python中sorted方法和列表的sort方法使用详解 - 听风。 - 博客园​www.cnblogs.com
  • 第一小时:学习直接用代码将数据填充到树控件中。为什么要先学习直接用代码将数据填充到树控件中?因为这种方法是最简单的,代码也最容易理解,学习树控件,先将这个学会,已经掌握了一半,所以先不要急着想怎么将表...
  • 一、前言控件能加载拖曳拉伸了,这些都是基本的前提工作,接下来的重点就是要动态加载选中控件的属性了,Qt的属性机制那是异常的强大,只能用强大到爆来形容,Qt中编写自定义控件,如果属性都用Q_PROPERTY来描述过,...

空空如也

空空如也

1 2 3 4
收藏数 75
精华内容 30
关键字:

treeview控件使用详解