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 DocumentManagement.UI { public partial class frmUserTempPurviewDetail : Form { public int RoleId = 0; public string RoleName = ""; public frmUserTempPurviewDetail() { InitializeComponent(); } private void frmUserTempPurviewDetail_Load(object sender, EventArgs e) { label2.Text = RoleName; InitTreeView(); } private void InitTreeView() { treeView1.Nodes.Clear(); List PrintTemplateList = new List(); Model.PrintTemplate PrintTemplateObj = new Model.PrintTemplate(); PrintTemplateList = DAL.PrintTemplateDB.GetPrintTemplateRootList(0); for (int i = 0; i < PrintTemplateList.Count; i++) { PrintTemplateObj = DAL.PrintTemplateDB.GetModel(PrintTemplateList[i].Id, RoleId); TreeNode Node = treeView1.Nodes.Add(PrintTemplateObj.Id.ToString(), PrintTemplateObj.XmlFileName.ToString()); BuildChildNode(PrintTemplateObj, Node); } SelectCheckNodes(); } private void BuildChildNode(Model.PrintTemplate 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].XmlFileName); 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); } DAL.UserTempPurviewDB.Delete(RoleId); for (int i = 0; i < listNodes.Count; i++) { Model.UserTempPurview UserPurview = new Model.UserTempPurview(); UserPurview.TemplateId = int.Parse(listNodes[i].Name.ToString()); UserPurview.RoleId = RoleId; DAL.UserTempPurviewDB.Add(UserPurview); } InitTreeView(); MessageBox.Show("医疗文书权限分配成功!"); } } catch (Exception en) { MessageBox.Show("医疗文书权限分配失败!" + en.Message); } } private void btnCancel_Click(object sender, EventArgs e) { Close(); } #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 treeView1_AfterSelect(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 = DAL.UserTempPurviewDB.GetPurviewListByRoleId(RoleId); SelectCheckNode(node, Purview); } } } }