Newer
Older
GHFX_REFACTOR / FrmPerm.cs
wxn on 9 Nov 2016 18 KB 冗余代码整理
using System;
using System.Collections.Generic;
using System.Data;
using System.Windows.Forms;
using DevComponents.DotNetBar;

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)
            {
                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;
                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;
                    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("保存成功!");
                            Close();
                        }
                    }
                }
                else
                {
                    sql = "select * from casic_perm where \"name\" ='" + txtName.Text.Trim() + "' and \"id\" <>" + id;
                    if (OledbHelper.QueryTable(sql).Rows.Count > 0)
                    {
                        MessageBox.Show("该权限名称已存在!");
                        return;
                    }
                    sql = "update casic_perm set \"name\" ='" + txtName.Text.Trim() + "',\"oid\" =" + oid + " where \"id\" =" + id;//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]);
            }
        }
    }
}