使用递归方法遍历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 = "";
            }
        }
原文地址:https://www.cnblogs.com/lichengcai/p/4437599.html