用树形结构分配权限

来源:互联网 发布:java教程 菜鸟教程下载 编辑:程序博客网 时间:2024/06/03 17:49
 勾选左边的树形结构中的项分配到右边,

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

//引用的命名空间
using System.Data.SqlClient;
using MBCODE.DataClass;

namespace MBCODE
{
    public partial class PowerTree :UserControl
    {
        //定义左边的权限树的集合表
        static DataTable noPowers = new DataTable();
        //定义右边的权限树的集合表
        static DataTable beingPowers = new DataTable();
        //定义集合表的结构
        static DataTable dtStruct = new DataTable();
        //定义用户列表集
        static DataTable userList = new DataTable();
        //判断用户初始调用那个权限表
        static int initialPower;

        public PowerTree(Control container)
        {
            container.SuspendLayout();
            InitializeComponent();
            this.Dock = DockStyle.Fill;
            container.Controls.Add(this);
            container.ResumeLayout(false);
            container.PerformLayout();
            //加载部门列表
            Dept_Cbo.Items.Clear();
            foreach (DataRow dr in GetDeptList().Rows)
            {
                Dept_Cbo.Items.Add(dr["deptName"].ToString());
            }
            //加载所有的员工列表集
            userList = GetUserByDeptList().Clone();
            foreach (DataRow dr in GetUserByDeptList().Rows)
            {
                userList.ImportRow(dr);
            }          
         }
         /// <summary>
         /// 窗体加载事件
         /// </summary>
         /// <param name="sender"></param>
         /// <param name="e"></param>
         private void PowerTree_Load(object sender, EventArgs e)
         {
             //加载用户的权限
             this.btn_user_power_LeftMove.Visible = MBClass.IfHavePower(this.btn_user_power_LeftMove.Name);
             this.btn_user_power_RightMove.Visible = MBClass.IfHavePower(this.btn_user_power_RightMove.Name);
             this.btn_user_power_AllLeftMove.Visible = MBClass.IfHavePower(this.btn_user_power_AllLeftMove.Name);
             this.btn_user_power_AllRightMove.Visible = MBClass.IfHavePower(this.btn_user_power_AllRightMove.Name);
             this.btn_user_power_Save.Visible = MBClass.IfHavePower(this.btn_user_power_Save.Name);
         }   
        /// <summary>
        /// 用户选择框的单击选择事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Users_Cbo_SelectedIndexChanged(object sender, EventArgs e)
        {
            #region
            //首先清除两边树的所有结点
            left_tree.Nodes.Clear();
            right_tree.Nodes.Clear();

            String userNo = Users_Cbo.Text.Replace("'", "").Trim();
            userNo = userNo.IndexOf('(') != -1 ? userNo.Substring(0, userNo.IndexOf('(')):userNo;

            //首先判断当前登陆用户的等级是否在选择用户之上
            object[] drr = userList.Rows.Find(userNo).ItemArray;          

            //登陆的员工号以及用户等级
            string loginUserNo = MBClass.UserInfoStaticList.Rows[0][0].ToString();
            int loginUserLevelNo = Convert.ToInt32(MBClass.UserInfoStaticList.Rows[0][11].ToString());
            //选择的员工号以及用户等级
            string CurrenUserNo = drr[0].ToString();
            int currenLevelNo = Convert.ToInt32(drr[11].ToString());

            if ((loginUserLevelNo <= currenLevelNo) && (CurrenUserNo != loginUserNo))
            {
                //登陆员工号的等级不大于选择员工号的等级时
                MessageBox.Show("你的用户等级不在当前选择的用户等级之上!", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Question);
                return;
            }

            noPowers =GetCanSetPowers(userNo);
            //用来排序
            DataView dv = noPowers.DefaultView;
            dv.Sort = "powerNo ASC";
            noPowers = dv.ToTable();
            noPowers.PrimaryKey = new DataColumn[] { noPowers.Columns["powerNo"] };
          
            CreateTree(left_tree.Nodes, 0, noPowers);
            left_tree.ExpandAll();

            //获取用户已拥有的权限集合填充已授予权限树
            beingPowers = GetBeingPowers(userNo);
            //用来克隆集合表的结构
            if (noPowers.Rows.Count > 0)
            {
                dtStruct = noPowers.Clone();
                foreach (DataRow dr in noPowers.Select())
                {
                    dtStruct.ImportRow(dr);
                }
                dtStruct.AcceptChanges();
            }
            else
            {
                dtStruct = beingPowers.Clone();
                foreach (DataRow dr in beingPowers.Select())
                {
                    dtStruct.ImportRow(dr);
                }
                dtStruct.AcceptChanges();
            }

            DataView dvv = beingPowers.DefaultView;
            dvv.Sort = "powerNo ASC";
            beingPowers = dvv.ToTable();
            beingPowers.PrimaryKey = new DataColumn[] { beingPowers.Columns["powerNo"] };

            CreateTree(right_tree.Nodes,0,beingPowers);
            right_tree.ExpandAll();
            #endregion
        }

        #region
        /// <summary>
        /// 获取部门列表
        /// </summary>
        /// <returns></returns>
        private static DataTable GetDeptList()
        {
            DataSet dst;
            using (SqlConnection conn =MBClass.GetSqlConnection())
            {
                SqlDataAdapter sda = new SqlDataAdapter("select * from com_dept", conn);
                dst = new DataSet();
                sda.Fill(dst);
                sda.Dispose();
            }          
            //dst.Tables[0].PrimaryKey = new DataColumn[] { dst.Tables[0].Columns["deptName"] };
            return dst.Tables[0];
        }
        /// <summary>
        /// 获取对应部门在职的员工列表
        /// </summary>
        /// <returns></returns>
        private static DataTable GetUserByDeptList()
        {
            DataSet dst;
            using (SqlConnection conn = MBClass.GetSqlConnection())
            {
                //注意离职的员工不载入
                SqlDataAdapter sda = new SqlDataAdapter("select * from com_user where activeFlag=0", conn);
                dst = new DataSet();
                sda.Fill(dst);
                sda.Dispose();
            }
            //设置主键
            userList.PrimaryKey = new DataColumn[] { userList.Columns["userNo"] };
            return dst.Tables[0];
        }

        /// <summary>
        /// 用户没有赋权限时后面加上“末授权”
        /// </summary>
        /// <param name="username"></param>
        /// <returns></returns>
        public static bool HaveUserPower(string userNo)
        {         
            int num = 0;
            using (SqlConnection conn = MBClass.GetSqlConnection())
            {
                SqlCommand cmd = new SqlCommand();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@userNo", SqlDbType.VarChar, 20).Value = userNo;
                cmd.CommandText = "haveUserPower";
                cmd.Connection = conn;
                conn.Open();

                num = Convert.ToInt32(cmd.ExecuteScalar());
                if (num != 0)
                {
                    conn.Close();
                    conn.Dispose();
                    return true;
                }
                else
                {
                    conn.Close();
                    conn.Dispose();
                    return false;
                }
            }
        }
        /// <summary>
        /// 用于实时刷新用户是否授权
        /// </summary>
        private void IfHaveUserPower()
        {
            //清除用户列表
            Users_Cbo.Text = string.Empty;
            Users_Cbo.Items.Clear();
            foreach (DataRow dr in GetDeptList().Rows)
            {
                //根据部门的名称来对应到部门的ID号,再根据ID号来对应该门的所有员工
                if (dr["deptName"].ToString() == this.Dept_Cbo.Text.Trim())
                {
                    foreach (DataRow drr in userList.Rows)
                    {
                        if (drr["deptNo"].ToString() == dr["deptNo"].ToString())
                        {
                            if (HaveUserPower(drr["userNo"].ToString()))
                            {
                                Users_Cbo.Items.Add(drr["userNo"].ToString() + "(" + drr["userName"].ToString() + ")");
                            }
                            else
                            {
                                Users_Cbo.Items.Add(drr["userNo"].ToString() + "(" + drr["userName"].ToString() + ")" + "末授权");
                            }
                        }
                    }
                    Users_Cbo.DroppedDown = true;
                }
            }
        }
        /// <summary>
        /// 为指定的节点集合中添加该层节点
        /// </summary>
        /// <param name="nodes"></param>
        /// <param name="parentid"></param>
        /// <param name="powers"></param>
        private void CreateTree(TreeNodeCollection nodes, int parentid, DataTable powers)
        {
            TreeNode node = null;
          
                for (int i = 0; i < powers.Rows.Count; i++)
                {
                    if (Convert.ToInt32(powers.Rows[i]["parent"].ToString())==parentid)
                    {
                        node = new TreeNode(powers.Rows[i]["powerName"].ToString());
                        node.Name = powers.Rows[i]["powerNo"].ToString();

                        node.Tag = powers.Rows[i];

                        //深度优先
                        CreateTree(node.Nodes,Convert.ToInt32(powers.Rows[i]["powerNo"].ToString()), powers);

                        nodes.Add(node);
                    }
                }
          
        }
        #endregion

        #region 调用的方法

        /// <summary>
        /// 获取未制授权的权限集
        /// </summary>
        /// <param name="userNo"></param>
        /// <returns></returns>
        private static DataTable GetCanSetPowers(string userNo)
        {
            //获取所有权限列表
            DataTable powers = GetPowers();
            //获取指定用户的可用权限列表
            DataTable bPowers = GetBeingPowers(userNo);
            RemoveAll(powers, bPowers);

            return powers;
        }

        /// <summary>
        /// 从母集合中移除子集合中存在的所有元素
        /// </summary>
        /// <param name="fullC"></param>
        /// <param name="childC"></param>
        private static void RemoveAll(DataTable fullC, DataTable childC)
        {
            //从所有权限中排除已有权限
            DataTable roots = FilterPowers(fullC, 0);

            Remove(fullC, roots, childC);
        }
        /// <summary>
        /// 筛选出指定父权限号的新集合
        /// </summary>
        /// <param name="list"></param>
        /// <param name="parentid"></param>
        /// <returns></returns>
        private static DataTable FilterPowers(DataTable list, int parentid)
        {
            DataTable nodes = new DataTable();
            nodes = list.Clone();     
           
    
           //保存指定父节点权限列表
                for (int i = 0; i < list.Rows.Count; i++)
                {
                    if (Convert.ToInt32(list.Rows[i]["parent"].ToString()) == parentid)
                    {                       
                        nodes.ImportRow((DataRow)list.Rows[i]);
                        nodes.AcceptChanges();
                    }
                }
              
                return nodes;
        }

       /// <summary>
       ///遍历所有权限,如果某项权在已授权限集合中,且无下级权限则,则移除,否则,递归遍历该权限项的所有子权限,如果存在已授权限集合中,则移除
       /// </summary>
       /// <param name="powers"></param>
       /// <param name="list"></param>
       /// <param name="beingPowers"></param>
        public static void Remove(DataTable powers, DataTable list, DataTable beingPowers)
        {

            try
            {
                for (int i = 0; i < list.Rows.Count; i++)
                {
                    //SysPower power = list[i];
                    //DataRow power = list.Rows[i] as DataRow;
                    string powerNo = list.Rows[i]["powerNo"].ToString();
                    for (int j = 0; j < beingPowers.Rows.Count; j++)
                    {
                        if (beingPowers.Rows[j]["powerNo"].ToString() == powerNo)
                        {
                            DataTable childs = FilterPowers(powers, Convert.ToInt32(powerNo));
                            Remove(powers, childs, beingPowers);

                            if (childs.Rows.Count < 1)
                            {
                                //powers.Rows[i].Delete();
                                for (int l = 0; l < powers.Rows.Count; l++)
                                {
                                    if (powers.Rows[l]["powerNo"].ToString() == powerNo)
                                    {
                                        powers.Rows[l].Delete();
                                        powers.AcceptChanges();
                                        l--;              
                                    }
                                      
                                }
                               
                                list.Rows[i].Delete();
                                list.AcceptChanges();

                                i--;
                            }
                        }
                     
                    }

                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }

        /// <summary>
        /// 获得所有权限
        /// </summary>
        /// <returns></returns>
        private static DataTable GetPowers()
        {           
            DataSet ds;
            using (SqlConnection conn = MBClass.GetSqlConnection())
            {
                SqlDataAdapter sda = new SqlDataAdapter("select  powerNo,parent,powerName,classString,powerLevel from com_syspower order by parent,powerno", conn);
                ds = new DataSet();
                sda.Fill(ds);
                sda.Dispose();
            }
            ds.Tables[0].PrimaryKey = new DataColumn[] { ds.Tables[0].Columns["powerNo"] };
            return ds.Tables[0];
        }
        /// <summary>
        /// 获得用户的权限
        /// </summary>
        /// <param name="userNo"></param>
        /// <returns></returns>
        private static DataTable GetBeingPowers(string userNo)
        {
            //调用初始表还是用户权限表           
            string initialSql = string.Empty;
            //判断该用户是否已经授权,若已经授权则调用已授的权限,反之调用该用户级别的初始权限
            using (SqlConnection con = MBClass.GetSqlConnection())
            {
                try
                {
                    con.Open();
                    SqlCommand cmd = new SqlCommand("select count(*) from com_user_power where userNo='"+userNo+"'",con);
                    initialPower= (int)cmd.ExecuteScalar();                  
                }
                catch (SqlException ex)
                {
                    MessageBox.Show("判断是否调用用户的初始权限时:"+ex.Message);
                }
            }

            DataSet ds;
            using (SqlConnection conn = MBClass.GetSqlConnection())
            {
                if (initialPower > 0)
                {
                    initialSql = "SELECT powerNo,parent,powerName,classString,powerLevel FROM com_syspower WHERE powerNo in (SELECT powerNo FROM com_user_power WHERE userNo ='" + userNo + "') ORDER BY parent,powerno";
                }
                else
                {
                    initialSql = "select powerNo,parent,powerName,classString,powerLevel from com_user_initialpower where userNo='" + userNo + "'";
                }
                SqlDataAdapter sda = new SqlDataAdapter(initialSql, conn);
                ds = new DataSet();
                sda.Fill(ds);
                sda.Dispose();
            }
            ds.Tables[0].PrimaryKey = new DataColumn[] { ds.Tables[0].Columns["powerNo"] };
            return ds.Tables[0];
        }  
 
       #endregion

        #region 处理树的勾选
        private void left_tree_AfterCheck(object sender, TreeViewEventArgs e)
        {
            if (e.Action == TreeViewAction.ByMouse)
            {
                try
                {
                    //设置复选框状态
                    SetTreeCheckBoxState(e.Node);
                }
                catch (Exception ex)
                {
                   MessageBox.Show("左树复选框选择处理发生异常,原因:" + ex.Message);
                }
            }
        }

        private void right_tree_AfterCheck(object sender, TreeViewEventArgs e)
        {
            if (e.Action == TreeViewAction.ByMouse)
            {
                try
                {
                    //设置复选框状态
                    SetTreeCheckBoxState(e.Node);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("右树复选框选择处理发生异常,原因:" + ex.Message);
                }
            }
        }

        /// <summary>
        /// 设置指定节点与相关节点复选框状态
        /// </summary>
        /// <param name="SelectNode"></param>
        private void SetTreeCheckBoxState(TreeNode SelectNode)
        {
            if (SelectNode.Checked)
            {
                //设置所有子节点为选中状态
                setChildNodeCheckedState(SelectNode, true);
                //如果节点存在父节点,并且所有子节点的被选中,那么将选中父节点
                if (SelectNode.Parent != null)
                {
                    setParentNodeCheckedState(SelectNode.Parent, true);
                }
            }
            else
            {
                //取消节点选中状态之后,取消所有父节点的选中状态
                setChildNodeCheckedState(SelectNode, false);
                //如果节点存在父节点,取消父节点的选中状态
                if (SelectNode.Parent != null)
                {
                    setParentNodeCheckedState(SelectNode, false);
                }
            }
        }

        /// <summary>
        /// 递归向下选中指定节点的所有子节点
        /// </summary>
        /// <param name="currNode"></param>
        /// <param name="state"></param>
        private void setChildNodeCheckedState(TreeNode currNode, bool state)
        {
            TreeNodeCollection nodes = currNode.Nodes;
            if (nodes.Count > 0)
            {
                foreach (TreeNode tn in nodes)
                {
                    tn.Checked = state;
                    setChildNodeCheckedState(tn, state);
                }
            }
        }

        /// <summary>
        /// 递归向上设置指定节点的所有上级节点复选框状态,
        /// </summary>
        /// <param name="currNode"></param>
        /// <param name="state"></param>
        private void setParentNodeCheckedState(TreeNode currNode, bool state)
        {
            if (state)
            {
                bool flag = true;

                foreach (TreeNode node in currNode.Nodes)
                {
                    if (!node.Checked)
                    {
                        flag = false;
                        break;
                    }
                }
                if (flag)
                {
                    currNode.Checked = true;
                    TreeNode parent = currNode.Parent;
                    if (parent != null) setParentNodeCheckedState(parent, state);
                }
            }
            else
            {
                currNode.Checked = false;
                TreeNode parent = currNode.Parent;
                if (parent != null) setParentNodeCheckedState(parent, state);
            }
        }
        #endregion
        /// <summary>
        /// 保存按钮事件 保存树根到数据库中
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SavePower_bt_Click(object sender, EventArgs e)
        {
            #region
            if (Users_Cbo.SelectedIndex == -1)
            {
                return;
            }
            String userNo = Users_Cbo.Text.Replace("'", "").Trim();
            userNo = userNo.IndexOf('(') != -1 ? userNo.Substring(0, userNo.IndexOf('(')) : userNo;
            if (initialPower > 0)
            {
                if (btn_user_power_Save.Tag == null)
                {
                    MessageBox.Show("未进行过授权操作", "提示:", MessageBoxButtons.OK, MessageBoxIcon.Question);

                    return;
                }
            }
            //先删除用户的权限再保存新的授权
            using (SqlConnection con = MBClass.GetSqlConnection())
            {
                con.Open();
                //开始事务
                SqlTransaction delSqlTran = con.BeginTransaction();
                SqlCommand delCmd = new SqlCommand("delete com_user_power where userNo='" + userNo + "' ", con);
                //事务对像分配给command的transaction属性
                delCmd.Transaction = delSqlTran;
                try
                {
                    delCmd.ExecuteNonQuery();
                    //事务的提交
                    delSqlTran.Commit();
                }
                catch (SqlException ex)
                {
                    //事务的回滚
                    delSqlTran.Rollback();
                    MessageBox.Show("删除用户原有的权限时发生异常:" + ex.Message);
                }
            }

            //保存新的授权到数据库中
            DataTable datas = new DataTable();
            datas = dtStruct.Clone();
            AddChildTreeData(this.right_tree.Nodes, datas);

            using (SqlConnection conn = MBClass.GetSqlConnection())
            {
                conn.Open();
                //启动一个事务
                SqlTransaction sqlTran = conn.BeginTransaction();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                //将transaction对象分配给要执行的command的transaction属性
                cmd.Transaction = sqlTran;
                try
                {
                    foreach (DataRow dr in datas.Rows)
                    {

                        cmd.CommandText = "insert into com_user_power values('" + userNo + "','" + dr["powerNo"].ToString() + "')";
                        cmd.ExecuteNonQuery();
                    }
                    //提交事务
                    sqlTran.Commit();

                    left_tree.Nodes.Clear();
                    right_tree.Nodes.Clear();
                    Users_Cbo.Text = "";
                    btn_user_power_Save.Tag = null;
                    MessageBox.Show("授权成功!", "恭喜你:", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    IfHaveUserPower();

                }
                catch (SqlException ex)
                {
                    //出现异常事务回滚
                    sqlTran.Rollback();
                    MessageBox.Show("授权不成功,原因:" + ex.Message);
                }
            }
            #endregion
        }
        /// <summary>
        /// 获取节点集合及子树的数据集合
        /// </summary>
        /// <param name="nodes"></param>
        /// <param name="datas"></param>
        private void AddChildTreeData(TreeNodeCollection nodes, DataTable datas)
        {
            foreach (TreeNode node in nodes)
            {
               
                DataRow  power = (DataRow)node.Tag;              
                if (datas.Rows.Count < 1)
                {
                    datas.ImportRow(power);
                    datas.AcceptChanges();
                }
                else
                {                  

                    if(!datas.Rows.Contains(power["powerNo"].ToString()))
                    {
                        datas.ImportRow(power);
                        datas.AcceptChanges();
                    }
                
                }             

                if (node.GetNodeCount(true) > 0)
                {
                    AddChildTreeData(node.Nodes, datas);
                }
            }
        }
        /// <summary>
        /// 将所有选中节点的数据添加到集合
        /// </summary>
        /// <param name="nodes"></param>
        /// <param name="datas"></param>
        private void GetMovedData(TreeNodeCollection nodes, DataTable datas)
        {
            foreach (TreeNode sourceNode in nodes)
            {
                if (sourceNode.Checked)
                {
                    //如当前的选中的是根结点--则把所有当前根结点的所有权限转到所要转到的权限树中
                    AddParentData(sourceNode, datas);

                    DataRow p = (DataRow)sourceNode.Tag;                  
               
                    if (!datas.Rows.Contains(p["powerNo"].ToString()))
                    {
                        datas.ImportRow(p);
                        datas.AcceptChanges();
                    }

                    AddChildTreeData(sourceNode.Nodes, datas);
                    //移除该子树
                    sourceNode.Remove();
                }
                else
                {
                    //深度递归
                    if (sourceNode.GetNodeCount(true) > 0)
                        GetMovedData(sourceNode.Nodes, datas);
                }
            }
        }

        /////改变数据重新加载tree
        private void AddParentData(TreeNode node, DataTable datas)
        {
            TreeNode parent = node.Parent;

            //表示当前不是根结点是子结点--把子结点转到所要转到的权限树中,然后再向上循环,
            //看当前子结点的父结点是否在所要转到的树根树中,然后是否要转到的所要转到的树根树中--再以此向上循环
            if (parent != null)
            {
                DataRow  power = (DataRow)parent.Tag;              

                if (!datas.Rows.Contains(power["powerNo"].ToString()))
                {
                    datas.ImportRow(power);
                    datas.AcceptChanges();
                }

                AddParentData(parent, datas);
            }
        }
        #region  四个权限分配按钮事件
        /// <summary>
        /// 把左边树选中的权限移除到右边的权限树中  >
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void RightMove_Bt_Click(object sender, EventArgs e)
        {
            if (left_tree.Nodes.Count < 1)
            {
                return;
            }
            try
            {
                btn_user_power_Save.Tag = "edit";
                //if (beingPowers.Rows.Count < 1)
                //{
                DataTable datas = new DataTable();
                datas = dtStruct.Clone();
                //将右移前的数据添加到集合
                AddChildTreeData(right_tree.Nodes, datas);
                //将Left树的选中节点数据添加到集合
                GetMovedData(left_tree.Nodes, datas);

                right_tree.Nodes.Clear();

                DataView dv = datas.DefaultView;
                dv.Sort = "powerNo ASC";
                datas = dv.ToTable();
                datas.PrimaryKey = new DataColumn[] { datas.Columns["powerNo"] };

                CreateTree(right_tree.Nodes, 0, datas);

                right_tree.ExpandAll();
                //}

                //else
                //{
                //    GetMovedData(left_tree.Nodes, beingPowers);

                //    right_tree.Nodes.Clear();                  

                //    CreateTree(right_tree.Nodes, 0, beingPowers);

                //    right_tree.ExpandAll();
                //}

            }
            catch (Exception ex)
            {
                MessageBox.Show("右移权限时发生异常,原因:" + ex.Message);
            }
        }
        /// <summary>
        /// 取消权限按钮  <
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void LeftMove_Bt_Click(object sender, EventArgs e)
        {
            if (right_tree.Nodes.Count < 1)
            {
                return;
            }
            try
            {
                btn_user_power_Save.Tag = "edit";
                //if (noPowers.Rows.Count < 1)
                //{
                    DataTable datas = new DataTable();
                    datas = dtStruct.Clone();
                    //将左移前的数据添加到集合
                    AddChildTreeData(left_tree.Nodes, datas);
                    //将Right树的选中节点数据添加到集合
                    GetMovedData(right_tree.Nodes, datas);

                    left_tree.Nodes.Clear();

                    DataView dv = datas.DefaultView;
                    dv.Sort = "powerNo ASC";
                    datas = dv.ToTable();
                    datas.PrimaryKey = new DataColumn[] { datas.Columns["powerNo"] };

                    CreateTree(left_tree.Nodes, 0, datas);

                    left_tree.ExpandAll();
                //}

                //else
                //{
                //    GetMovedData(right_tree.Nodes, noPowers);

                //    left_tree.Nodes.Clear();

                //    CreateTree(left_tree.Nodes, 0, noPowers);

                //   left_tree.ExpandAll();
                //}

            }
            catch (Exception ex)
            {
                MessageBox.Show("左移权限时发生异常,原因:" + ex.Message);
            }
        }
        /// <summary>
        /// 赋全部权限按钮  >>
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void AllRightMove_Bt_Click(object sender, EventArgs e)
        {
            if (left_tree.Nodes.Count < 1)
            {
                return;
            }
            try
            {
                btn_user_power_Save.Tag = "edit";
               
                    DataTable datas = new DataTable();
                    datas = dtStruct.Clone();
                    //将左移前的数据添加到集合
                    AddChildTreeData(left_tree.Nodes, datas);                   
              
                    //将右移前的数据添加到集合
                    AddChildTreeData(right_tree.Nodes, datas);
              
                left_tree.Nodes.Clear();
                right_tree.Nodes.Clear();

                DataView dv = datas.DefaultView;
                dv.Sort = "powerNo ASC";
                datas = dv.ToTable();
                datas.PrimaryKey = new DataColumn[] { datas.Columns["powerNo"] };

                CreateTree(right_tree.Nodes, 0, datas);
                right_tree.ExpandAll();
            }
            catch (Exception ex)
            {
                MessageBox.Show("右移全部权限时发生异常,原因:" + ex.Message);
            }
        }
        /// <summary>
        /// 取消全部权限按钮  <<
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void AllLeftMove_Bt_Click(object sender, EventArgs e)
        {
            if (right_tree.Nodes.Count < 1)
            {
                return;
            }
            try
            {
                btn_user_power_Save.Tag = "edit";
                DataTable datas = new DataTable();
                datas = dtStruct.Clone();

                AddChildTreeData(left_tree.Nodes, datas);

                AddChildTreeData(right_tree.Nodes, datas);

                left_tree.Nodes.Clear();
                right_tree.Nodes.Clear();

                DataView dv = datas.DefaultView;
                dv.Sort = "powerNo ASC";
                datas = dv.ToTable();
                datas.PrimaryKey = new DataColumn[] { datas.Columns["powerNo"] };

                CreateTree(left_tree.Nodes, 0, datas);
                left_tree.ExpandAll();
            }
            catch (Exception ex)
            {
               MessageBox.Show("左移全部权限时发生异常,原因:" + ex.Message);
            }
        }
        #endregion

        /// <summary>
        /// 部门选择框的单击选择事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Dept_Cbo_SelectedIndexChanged(object sender, EventArgs e)
        {
            IfHaveUserPower();
        }
    }
}

原创粉丝点击