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; using DevComponents.DotNetBar; using System.Collections; namespace Cyberpipe { public partial class FrmPerm : Office2007Form { int id; DataTable result; Dictionary<string, string> oper = new Dictionary<string, string>(); public FrmPerm(int _id) { InitializeComponent(); id = _id; } /// <summary> /// 窗体初始化事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FrmPerm_Load(object sender, EventArgs e) { string sql = "select \"id\",\"name\" from casic_oper"; DataTable dt = OledbHelper.QueryTable(sql); if (dt != null && dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { cbxOName.Items.Add(dt.Rows[i][1].ToString().Trim()); oper.Add(dt.Rows[i][1].ToString().Trim(), dt.Rows[i][0].ToString().Trim()); } } sql = "select \"name\" from casic_resc where \"pname\"='NULL'"; dt = OledbHelper.QueryTable(sql); if (dt != null && dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { TreeNode firstNode = new TreeNode(); firstNode.ImageIndex = 0; firstNode.SelectedImageIndex = 0; firstNode.Checked = false; firstNode.Text = dt.Rows[i][0].ToString().Trim(); treeViewResource.Nodes.Add(getTreeNodes(firstNode, firstNode.Text.Trim())); } } if (id != -1) { this.Text = "权限管理"; buttonX1.Text = "保存"; sql = "select casic_perm.\"name\",casic_perm.\"oid\",casic_resc.\"name\" from casic_resc join casic_permresc on casic_resc.\"id\"=casic_permresc.\"rescid\" join casic_perm on casic_permresc.\"permid\"=casic_perm.\"id\" where casic_permresc.\"permid\"=" + id.ToString(); result = OledbHelper.QueryTable(sql); if (result != null && result.Rows.Count > 0) { txtName.Text = result.Rows[0][0].ToString().Trim(); //得到所有节点 List<TreeNode> listNode = new List<TreeNode>(); foreach (TreeNode node in treeViewResource.Nodes) { listNode = getAllNode(listNode, node); listNode.Add(node); } for (int i = 0; i < result.Rows.Count; i++) { for (int j = 0; j < listNode.Count; j++) { if (result.Rows[i][2].ToString().Trim() == listNode[j].Text.Trim()) { listNode[j].Checked = true; } } } if (result.Rows[0][1].ToString().Trim() != "") { //sql = "select name from casic_oper where id=" + result.Rows[0][1].ToString().Trim(); //dt = OledbHelper.QueryTable(sql); //if (dt != null && dt.Rows.Count > 0) { for (int i = 0; i < cbxOName.Items.Count; i++) { if (oper[cbxOName.Items[i].ToString().Trim()] == result.Rows[0][1].ToString().Trim()) { cbxOName.SelectedIndex = i; break; } } } } } else { sql = "select \"name\" from casic_perm where \"id\"=" + id.ToString(); dt = OledbHelper.QueryTable(sql); if (dt != null && dt.Rows.Count > 0) { txtName.Text = dt.Rows[0][0].ToString().Trim(); } } } } /// <summary> /// 得到指定节点的所有子节点 /// </summary> /// <param name="pnode"></param> /// <param name="pname"></param> /// <returns></returns> private TreeNode getTreeNodes(TreeNode pnode,string pname) { string sql = "select \"name\" from casic_resc where \"pname\"='" + pname + "'"; DataTable dt = OledbHelper.QueryTable(sql); if (dt != null && dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { TreeNode node = new TreeNode(); node.ImageIndex = 0; node.SelectedImageIndex = 0; node.Checked = false; node.Text = dt.Rows[i][0].ToString().Trim(); pnode.Nodes.Add(getTreeNodes(node, node.Text.Trim())); } } return pnode; } /// <summary> /// 得到所有选中的节点 /// </summary> /// <returns></returns> private List<TreeNode> getAllSelectedNode() { List<TreeNode> listSelectedNode = new List<TreeNode>(); if (treeViewResource.Nodes.Count > 0) { foreach (TreeNode node in treeViewResource.Nodes) { if (node.Checked) { List<TreeNode> list = new List<TreeNode>(); list = getAllNode(list, node); if (list.Count > 0) { foreach (TreeNode realNode in list) { if (realNode.Checked) { listSelectedNode.Add(realNode); } } } listSelectedNode.Add(node); } } } return listSelectedNode; } /// <summary> /// 得到所有节点 /// </summary> /// <param name="listNodes"></param> /// <param name="node"></param> /// <returns></returns> private List<TreeNode> getAllNode(List<TreeNode> listNodes,TreeNode node) { if (node.Nodes.Count > 0) { foreach (TreeNode childNode in node.Nodes) { listNodes = getAllNode(listNodes, childNode); listNodes.Add(childNode); } } return listNodes; } /// <summary> /// 添加、保存按钮事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonX1_Click(object sender, EventArgs e) { if (txtName.Text.Trim() == "") { MessageBox.Show("请输入权限名称!"); return; } List<TreeNode> listSelectedNode = getAllSelectedNode(); if (listSelectedNode.Count <= 0) { MessageBox.Show("请选择资源名称!"); return; } string sql; int oid = -1; int rid = -1; DataTable dt; if (cbxOName.SelectedIndex != -1) { if (!int.TryParse(oper[cbxOName.Text.Trim()], out oid)) { oid = -1; } } try { if (id == -1) { sql = "select * from casic_perm where \"name\" ='" + txtName.Text.Trim() + "'"; if (OledbHelper.QueryTable(sql).Rows.Count > 0) { MessageBox.Show("该权限名称已存在!"); return; } sql = "insert into casic_perm(\"name\",\"oid\") values('" + txtName.Text.Trim() + "',null)"; if (OledbHelper.sqlExecuteNonQuery(sql) > 0) { sql = "select \"id\" from casic_perm where \"name\"='" + txtName.Text.Trim() + "'"; int permId = OledbHelper.ExecuteScalar(sql); if (permId >= 0) { for (int i = 0; i < listSelectedNode.Count; i++) { TreeNode node = listSelectedNode[i]; if (node != null) { string pname = (node.Parent == null ? "NULL" : node.Parent.Text.Trim()); sql = "select \"id\" from casic_resc where \"name\"='" + node.Text.Trim() + "' and \"pname\"='" + pname + "'"; int rescId = OledbHelper.ExecuteScalar(sql); if (rescId >= 0) { sql = "insert into casic_permresc(\"permid\",\"rescid\") values('" + permId + "'," + rescId + ")"; if (OledbHelper.sqlExecuteNonQuery(sql) > 0) { } } } } MessageBox.Show("保存成功!"); this.Close(); } } } else { sql = "select * from casic_perm where \"name\" ='" + txtName.Text.Trim() + "' and \"id\" <>" + id.ToString(); if (OledbHelper.QueryTable(sql).Rows.Count > 0) { MessageBox.Show("该权限名称已存在!"); return; } sql = "update casic_perm set \"name\" ='" + txtName.Text.Trim() + "',\"oid\" =" + oid + " where \"id\" =" + id.ToString();//oid=oper[""]; OledbHelper.sqlExecuteNonQuery(sql); { sql = "select casic_resc.\"name\",casic_resc.\"pname\" from casic_resc join casic_permresc on casic_resc.\"id\"=casic_permresc.\"rescid\" where casic_permresc.\"permid\"=" + id.ToString().Trim(); dt = OledbHelper.QueryTable(sql); if (dt != null ) { if (dt.Rows.Count > 0) { for (int i = 0; i < listSelectedNode.Count; i++ ) { bool bl = false; for (int j = 0; j < dt.Rows.Count; j++) { string pname = (listSelectedNode[i].Parent == null ? "NULL" : listSelectedNode[i].Parent.Text.Trim()); if (listSelectedNode[i].Text.Trim() == dt.Rows[j][0].ToString().Trim() && pname == dt.Rows[j][1].ToString().Trim()) { dt.Rows.RemoveAt(j); bl = true; break; } } if (bl) { listSelectedNode.RemoveAt(i); i--; } } for (int i = 0; i < listSelectedNode.Count; i++) { TreeNode node = listSelectedNode[i]; if (node != null) { string pname = (node.Parent == null ? "NULL" : node.Parent.Text.Trim()); sql = "select \"id\" from casic_resc where \"name\"='" + node.Text.Trim() + "' and \"pname\"='" + pname + "'"; int rescId = OledbHelper.ExecuteScalar(sql); if (rescId >= 0) { sql = "insert into casic_permresc(\"permid\",\"rescid\") values('" + id + "'," + rescId + ")"; if (OledbHelper.sqlExecuteNonQuery(sql) > 0) { } } } } for (int j = 0; j < dt.Rows.Count; j++) { sql = "select \"id\" from casic_resc where \"name\"='" + dt.Rows[j][0].ToString().Trim() + "' and \"pname\"='" + dt.Rows[j][1].ToString().Trim() + "'"; int rescId = OledbHelper.ExecuteScalar(sql); if (rescId >= 0) { sql = "delete from casic_permresc where \"permid\"=" + id.ToString().Trim() + " and \"rescid\"=" + rescId; if (OledbHelper.sqlExecuteNonQuery(sql) > 0) { } } } } else { for (int i = 0; i < listSelectedNode.Count; i++) { TreeNode node = listSelectedNode[i]; if (node != null) { string pname = (node.Parent == null ? "NULL" : node.Parent.Text.Trim()); sql = "select \"id\" from casic_resc where \"name\"='" + node.Text.Trim() + "' and \"pname\"='" + pname + "'"; int rescId = OledbHelper.ExecuteScalar(sql); if (rescId >= 0) { sql = "insert into casic_permresc(\"permid\",\"rescid\") values('" + id + "'," + rescId + ")"; if (OledbHelper.sqlExecuteNonQuery(sql) > 0) { } } } } } MessageBox.Show("保存成功!"); DialogResult = DialogResult.OK; Close(); } } } } catch (Exception ex) { LogError.PublishError(ex); } } /// <summary> /// 关闭按钮事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonX2_Click(object sender, EventArgs e) { Close(); } /// <summary> /// 节点选中状态改变事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void treeViewResource_AfterCheck(object sender, TreeViewEventArgs e) { if (e.Action != TreeViewAction.Unknown) { if (e.Node == null) { return; } CheckChildTreeNode(e.Node); CheckParentTreeNode(e.Node); } } /// <summary> /// 改变知道节点的父节点的选中状态 /// </summary> /// <param name="node"></param> private void CheckParentTreeNode(TreeNode node) { if (node == null) { return; } if (node.Parent != null) { if (node.Checked) { node.Parent.Checked = node.Checked; } else { if (node.Parent.Nodes.Count > 0) { bool blIsAllChildChecked = false; foreach (TreeNode childNode in node.Parent.Nodes) { blIsAllChildChecked = childNode.Checked; if (blIsAllChildChecked) { break; } } if (!blIsAllChildChecked) { node.Parent.Checked = node.Checked; } } } CheckParentTreeNode(node.Parent); } } /// <summary> /// 改变指定节点子节点状态 /// </summary> /// <param name="node"></param> private void CheckChildTreeNode(TreeNode node) { if (node == null) { return; } // 递归处理子节点 for (int i = 0; i < node.Nodes.Count; i++) { node.Nodes[i].Checked = node.Checked; CheckChildTreeNode(node.Nodes[i]); } } } }