使用递归方法遍历TreeView的节点如配置则勾选

自己在网上找了一段时间都没有找到取自数据库的值与TreeView中的节点值进行对比如匹配则勾选中CheckBox的资料,后面自己写了一个递归方法实现,现在记录起来以备需要时使用。在没写这递归方法前如果需要一个一个对比深度为4的TreeView 需要不少于5个for循环,写太多内嵌的for循环觉得不好,因此写了以下的方法。

 /// <summary>
        /// 递归实现与TreeView节点值对比,如相同则该节点的CheckBox=True
        /// </summary>
        /// <param name="parentNode">节点</param>
        /// <param name="value">对比值</param>
       private void SetTreeViewChecked(TreeNode parentNode, int value)
        {
            foreach (TreeNode node in parentNode.ChildNodes)
            {
                if (node.Value == value.ToString())
                {
                    node.Checked = true;
                }
                if (node.ChildNodes.Count > 0)
                {
                    SetTreeViewChecked(node, value);
                }
            }
        }

//获取最后一次选择CheckBoxList勾选中的值
        protected void CheckRole_SelectedIndexChanged(object sender, EventArgs e)
        {
            string s = Request.Form["__EVENTTARGET"];
            int index = Convert.ToInt32(s.Substring(s.LastIndexOf("$") + 1));
            BindListView(TreeViewMenu);//重新加载菜单
            TreeViewMenu.ExpandAll();
            if (CheckRole.Items[index].Selected)
            {
                labRoleId.Text = CheckRole.Items[index].Value.ToString();
                labRole.Text = CheckRole.Items[index].Text.ToString();
                //根据角色名选查看所拥有的菜单权限
                DataTable dt = menuPerBll.GetListOfRoleId(Convert.ToInt32(labRoleId.Text)).Tables[0];
                //根据所选角色勾选已拥有的菜单
                if (dt.Rows.Count > 0)
                {
                    for (int j = 0; j < dt.Rows.Count; j++)
                    {
                        for (int i = 0; i < TreeViewMenu.Nodes.Count; i++)
                        {
                            SetTreeViewChecked(TreeViewMenu.Nodes[i], Convert.ToInt32(dt.Rows[j]["MenuId"].ToString())); //对比如值匹配的则checkBox的checked=true
                        }
                    }
                }
            }
            else
            {
                labRoleId.Text = "";
                labRole.Text = "";
            }
        }
时间: 2024-10-05 23:25:24

使用递归方法遍历TreeView的节点如配置则勾选的相关文章

delphi 递归遍历TreeView树节点

//以下全部调试通过,你在窗体扔一个Treeview就行了 procedure GetRootNodes(ATreeView:TTreeView);//得到所有根节点var vNode:TTreeNode;begin  vNode:=nil;  vNode:=ATreeView.Items.GetFirstNode;  While vNode<>nil do  begin    ShowMessage(vNode.Text);//处理查找到的根节点    vNode:=vNode.getNex

C# TreeView控件 父节点子节点勾选变化关联

项目用到了TreeView控件,父节点子节点勾选需要关联.子节点勾选,父节点同步.父节点勾选,所有子节点都勾选,并递归.网上找了一圈,好多代码都不满足要求.节点勾选,向下递归子节点,都实现了.节点勾选,向上递归,父节点同步勾选,也实现了.但是节点去除勾选,应该判断其同级所有节点,若同级节点都处于未勾选状态,则应该去除父节点勾选状态,并向上递归.这一点,没有找到合适的代码.就自己写了这部分代码.仅仅只是实现这个效果,代码还有优化的空间,后续有时间再来修改了. private void treeVi

TreeView CheckBox勾选联动

在C# Winform项目中用到了TreeView控件,并且需要勾选的功能.父子节点联动,需要实现如下: 1.当选中父节点的时候,如果它的子节点有没有选中的,则选中. 2.当取消选中父节点的时候,将所有子节点都取消选中. 3.当选中子节点的时候,要判断它的父节点中的所有子节点,是不是都已经选中,如果都选中则选中父节点. 4.当取消子节点的时候,要判断父节点是否已经被勾选上,如果勾选上则取消选中父节点. 注意:所有的节点都有可能既是父节点,又是子节点.举例:当效果3满足时,选中了父节点,那么这个父

easyui Tree模拟级联勾选cascadeCheck,节点选择,父节点自动选中,节点取消,父节点自动取消选择,节点选择,所有子节点全部选择,节点取消,所有子节点全部取消勾选

最近项目中用到easyui tree,发现tree控件的cascadeCheck有些坑,不像miniui 的tree控件,级联勾选符合业务需求,所以就自己重新改写了onCheck事件,符合业务需求.网上百度了很多资料,都没有完全符合自己业务场景的,所以就自己动手写咯. 先说一下自己的业务需求: 1.选中节点,上级以及所有直系上级节点自动选中,所有下级子孙节点全部自动选中: 2.取消选择节点,如果兄弟节点都未选择,则上级以及所有直系上级节点自动取消选择,所有下级子孙节点全部取消选中. 这里说一下c

C# TreeView 树节点:递归显示整个系统盘符文件目录及文件

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace Demo { /// <summary> /// 有关对于TreeView节点的填充的相关处理类 /// </summary> class TreeViewUtils { #region 有关将整个系统盘

TreeView 树节点的处理

TreeView 树节点的处理 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10

web.config中sessionState节点的配置方案

web.config中sessionState节点的配置方案 web.config关于sessionState节点的配置方案,sessionState有五种模式:Custom,off,inProc,StateServer,SqlServer. 1.Custom模式  会话状态将使用自定义数据存储区来存储会话状态信息. 2.off模式 从字面上就可以看出这个是关闭模式,如果当前页面不需要session的值,为了减少服务器资源,你可以去掉Session的开销. <sessionState mode=

java 遍历所有子节点

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

winform treeview 通过节点名称添加子节点

/// <summary> /// 添加人员节点(利用TreeNodeCollection) /// </summary> /// <param name="tnc">TreeNodeCollection(TreeView的节点集合)</param> /// <param name="pid_val">父id的值</param> /// <param name="id"