zoukankan      html  css  js  c++  java
  • 使用递归方法遍历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 = "";
                }
            }
    
  • 相关阅读:
    STM32的串口DMA收发以及双缓冲区的实现
    平衡二叉树
    二叉树的深度
    3D数学基础(四)四元数和欧拉角
    3D数学基础(三)矩阵
    3D数学基础(二)向量
    3D数学基础(一)Unity坐标系
    快速学会开发微信小程序
    苦逼的程序员
    开通博客,在这个年末,重新开始。
  • 原文地址:https://www.cnblogs.com/lichengcai/p/4437599.html
Copyright © 2011-2022 走看看