菜单权限设置,绑定树结构
2013-07-26 17:11
267 查看
//树视图绑定函数
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
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
相关文章推荐
- 菜单 转成 树结构 示例1(权限设置1)
- NET 利用 jquery+ztree 实现 角色权限设置(以树结构显示导航菜单)
- SwipeLayout 如何按照权限要求隐藏菜单项(按菜单显示比例动态设置rightViewWidth)
- jsp权限菜单绑定的基本实现
- 带有权限设置的Accordion层叠菜单添加
- 分享使用NPOI导出Excel树状结构的数据,如部门用户菜单权限
- C#遍历菜单并设置权限
- 利用django-suit模板添加自定义的菜单、页面及设置访问权限
- 使用dtree生成的树结构,ajax动态加载子节点后,如何绑定右键菜单续
- 根据用户权限设置主窗体菜单
- 利用django-suit模板在管理后台添加自定义的菜单和自定义的页面、设置访问权限
- 【java】树结构在实际中的应用:菜单树,权限树分析
- 遍历菜单到带checkboxtreeview中设置权限
- 阿里Bui动态菜单以及权限表结构设计
- ecshop 后台权限设置和导航菜单设置字段
- 在PowerBuilder中实现菜单条级权限的设置
- 角色权限管理系统(表结构设计和一级菜单显示)
- 052医疗项目-模块五:权限设置-实现根据用户显示不同的菜单
- Ztree设置权限管理时显示树形菜单
- oracle rac 存储设备绑定及权限设置