//树视图绑定函数
        public void BindDataToTreeView(IList<RoleMenus> ilistrolemenus)
        {
            // 禁用树视图的重绘
            this.treeView1.BeginUpdate();
            // 清除原有节点
            this.treeView1.Nodes.Clear();
            // 遍历权限集合以加载数据
            foreach (RoleMenus rolemenus in ilistrolemenus)
            {
                // 定义权限根项
                TreeNode rootTreeNode = null;
                // 如果是权限根项
                if (rolemenus.Fmuname == "0")
                {
                    rootTreeNode = new TreeNode(rolemenus.Menutext);
                    rootTreeNode.Tag = rolemenus.Menuname;
                    rootTreeNode.Checked = false;
                    this.treeView1.Nodes.Add(rootTreeNode);
                }
                 //如果是权限子项
                else
                {
                    // 创建权限子项
                    TreeNode childTreeNode = new TreeNode(rolemenus.Menutext);
                    childTreeNode.Tag = rolemenus.Menuname;
                    childTreeNode.Checked = true;
                    // 将子项添加到对应的父项中
                    foreach (TreeNode tmpTreeNode in this.treeView1.Nodes)
                    {
                        // 如果与现存的节点父级权限相同
                        if (tmpTreeNode.Tag.ToString() == rolemenus.Fmuname)
                        {
                            // 递归添加所有层级子节点
                            tmpTreeNode.Nodes.Add(LoadAllChildTreeNode(childTreeNode,ilistrolemenus));
                        }
                    }
                }
            }

            // 展开所有树节点
            this.treeView1.ExpandAll();

            // 启用树视图的重绘
            this.treeView1.EndUpdate();
        }

        #region Private Methods
        /// <summary>
        /// 加载所有树子节点
        /// </summary>
        /// <param name="currentChildTreeNode">当前子节点</param>
        /// <param name="rightsCollection">所有权限集合</param>
        /// <returns>加载了所有次级子节点的当前子节点</returns>
        private TreeNode LoadAllChildTreeNode(TreeNode currentChildTreeNode, IList<RoleMenus> ilistrolemenus)
        {

            // 遍历同父权限项集合
            foreach (RoleMenus tmpRights in ilistrolemenus)
            {
                // 如果当前父级权限项的权限名称与当前节点相同
                if (tmpRights.Fmuname == currentChildTreeNode.Tag.ToString())
                {
                    // 为当前节点创建新的子节点
                    TreeNode newChildTreeNode = new TreeNode(tmpRights.Menutext);
                    newChildTreeNode.Tag = tmpRights.Menuname;
                    newChildTreeNode.Checked = true;
                    // 创建同父权限项集合
                    List<RoleMenus> sameNessParentRightsList = new List<RoleMenus>();
                    // 获取所有与当前权限项具有相同父权限项的权限项
                    foreach (RoleMenus sameNessParentRights in ilistrolemenus)
                    {
                        if (sameNessParentRights.Fmuname == tmpRights.Fmuname)
                            sameNessParentRightsList.Add(sameNessParentRights);
                    }
                    // 递归添加到当前节点及其所有子节点
                    currentChildTreeNode.Nodes.Add(LoadAllChildTreeNode(newChildTreeNode, ilistrolemenus));
                }
            }

            // 返回当前处理的节点
            return currentChildTreeNode;
        }
        #endregion

posted on 2013-07-26 17:11  点滴汪洋  阅读(1140)  评论(0编辑  收藏  举报