using AIMSBLL; using AIMSExtension; using AIMSModel; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace AIMS.PublicUI.UI { public partial class frmUserPurviewDetail : Form { public int RoleId = 0; public string RoleName = ""; public frmUserPurviewDetail() { InitializeComponent(); } private void frmUserPurviewDetail_Load(object sender, EventArgs e) { label2.Text = RoleName; InitTreeView(); } private void InitTreeView() { treeView1.Nodes.Clear(); List MenuList = new List(); AIMSModel.Menu Menu = new AIMSModel.Menu(); MenuList = BMenu.GetMenuRootList(0); for (int i = 0; i < MenuList.Count; i++) { Menu = BMenu.GetMenuById(MenuList[i].Id.Value ,AIMSExtension.PublicMethod.RoleId,1); TreeNode Node = treeView1.Nodes.Add(Menu.Id.ToString(), Menu.Name); BuildChildNode(Menu, Node); } SelectCheckNodes(); } private void BuildChildNode(AIMSModel.Menu Menu, TreeNode ParentNode) { for (int i = 0; i < Menu.Children.Count; i++) { TreeNode Node = ParentNode.Nodes.Add(Menu.Children[i].Id.ToString(), Menu.Children[i].Name); BuildChildNode(Menu.Children[i], Node); } } private void btnSave_Click(object sender, EventArgs e) { try { if (MessageBox.Show("确定要分配该角色吗?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes) { List listNodes = new List(); foreach (TreeNode node in treeView1.Nodes) { FindCheckNode(node, listNodes); } BUserPurview.Delete(RoleId); for (int i = 0; i < listNodes.Count; i++) { UserPurview UserPurview = new UserPurview(); UserPurview.MenuId = int.Parse(listNodes[i].Name.ToString()); UserPurview.RoleId = RoleId; BUserPurview.Insert(UserPurview); } InitTreeView(); ////dgvRole_CellMouseClick(null, null); MessageBox.Show("权限分配成功!"); AIMSExtension.PublicMethod.RoleName = BMenu.GetMenuRootListManageStr(AIMSExtension.PublicMethod.RoleId, "功能权限"); } } catch (Exception en) { MessageBox.Show("权限分配失败!" + en.Message); } } #region 保存节点数据 private void FindCheckNode(TreeNode node, List listNodes) { if (node.Checked) { listNodes.Add(node); } foreach (TreeNode childnode in node.Nodes) { FindCheckNode(childnode, listNodes); } } #endregion #region 根据角色选择节点 private void SelectCheckNode(TreeNode node, List listNodes) { for (int i = 0; i < listNodes.Count; i++) { if (node.Name == listNodes[i].ToString()) { node.Checked = true; } } foreach (TreeNode childnode in node.Nodes) { SelectCheckNode(childnode, listNodes); } } #endregion private void btnCancel_Click(object sender, EventArgs e) { Close(); } private void treeView1_AfterCheck(object sender, TreeViewEventArgs e) { if (e.Action != TreeViewAction.Unknown) { SetNodeCheckStatus(e.Node, e.Node.Checked); SetNodeStyle(e.Node); } } private void SetNodeCheckStatus(TreeNode tn, bool Checked) { if (tn == null) return; foreach (TreeNode tnChild in tn.Nodes) { tnChild.Checked = Checked; SetNodeCheckStatus(tnChild, Checked); } TreeNode tnParent = tn; } private void SetNodeStyle(TreeNode Node) { int nNodeCount = 0; if (Node.Nodes.Count != 0) { foreach (TreeNode tnTemp in Node.Nodes) { if (tnTemp.Checked == true) nNodeCount++; } if (nNodeCount == Node.Nodes.Count) { Node.Checked = true; Node.ExpandAll(); } else if (nNodeCount == 0) { Node.Checked = false; Node.Collapse(); } else { Node.Checked = true; } } //当前节点选择完后,判断父节点的状态,调用此方法递归。 if (Node.Parent != null) SetNodeStyle(Node.Parent); } public void SelectCheckNodes() { foreach (TreeNode node in treeView1.Nodes) { List Purview = new List(); Purview = BUserPurview.GetPurviewListByRoleId(RoleId); SelectCheckNode(node, Purview); } } } }