• C# winform 权限设置的解决方案


    题注:因为我不知道怎么命名比较合适,就随便列了个名字,后面想好再改吧,或者就这样好了也不一定。

    先上一张图,主要是介绍了这种介面的做法,还可以吧,至少是自己捣弄出来的,呵呵。

    图一、权限分配主界面

     

    看了上面,大概猜到我要说什么了吧?就是那个单个,或多个项目的移动实现原理,至于数据库的设计,这里不准备说了,只说逻辑层的一些思路(虽然我分不太清楚数据层、逻辑层、应用层这些鬼东西,但大家能理解就好了。)

    首先,先对各个控件命个名:

     1.未分配ListBox --> ltbRoleOutList
     2.已分配ListBox --> ltbRoleInList
     3. --> btnInAll
     4. --> btnInOne
     5. --> btnOutOne
     6. --> btnOutAll
     7. --> btnSave

    好了,下面代码出现的东西,自己对号入座,下面进入正题

    1、既然要操作,那么首先就要把它们加载出来,因为这些权限肯定要存在数据库中的,如下:

     1         /// <summary>
     2         /// 綁定已分配及未分配的用戶組
     3         /// </summary>
     4         private void BindList()
     5         {
     6             if (string.IsNullOrEmpty(oCimUserRole.userId))
     7             {
     8                 MessageBox.Show("加載出錯,請關閉本窗口","提示");
     9                 return;
    10             }
    11             DataSet dsOutRole = oCimUserRole.GetUserOutRoleNameList();  //加載未分配的權限
    12             DataSet dsInRole = oCimUserRole.GetUserInRoleNameList();    //加載已分配的權限
    13 
    14             int outCount = dsOutRole.Tables[0].Rows.Count;
    15             int inCount = dsInRole.Tables[0].Rows.Count;
    16 
    17             for (int j = 0; j < outCount; j++)
    18             {
    19                 ltbRoleOutList.Items.Add(dsOutRole.Tables[0].Rows[j][0].ToString());
    20             }
    21 
    22             for (int i = 0; i < inCount; i++)
    23             {
    24                 ltbRoleInList.Items.Add(dsInRole.Tables[0].Rows[i][0].ToString());
    25             }
    26         }

    2、加载完数据以后,当需要添加(即把 ltbRoleOutList的项移到ltbRoleInList那里去)、删除(跟“添加”相反,自己理解。)权限时,我们首先要获取被移动的是哪几项,那怎么知道呢?下面有两个方法,就是分别取左别和右边的被选中项目。

     1         /// <summary>
     2         /// 獲取未分配列表中的選中項
     3         /// </summary>
     4         /// <returns></returns>
     5         private List<string> GetLeftSelectedList()
     6         {
     7             List<string> items = new List<string>();
     8             int lCount = ltbRoleOutList.SelectedItems.Count;
     9             for (int i = 0; i < lCount; i++)
    10             {
    11                 items.Add(ltbRoleOutList.SelectedItems[i].ToString());
    12             }
    13 
    14             return items;
    15         }
    16 
    17         /// <summary>
    18         /// 獲取已分配列表中的選中項
    19         /// </summary>
    20         /// <returns></returns>
    21         private List<string> GetRightSelectedList()
    22         {
    23             List<string> items = new List<string>();
    24             int lCount = ltbRoleInList.SelectedItems.Count;
    25             for (int i = 0; i < lCount; i++)
    26             {
    27                 items.Add(ltbRoleInList.SelectedItems[i].ToString());
    28             }
    29 
    30             return items;
    31         }

    以上两个方法,返回值是一个List<string>类

    3、获取到选中项还不够,我们接下来要进行的动作无非就是:添加权限(右移)和删除权限(左移),所以,我们也针对此写两个方法,方便日后调用,如下:

     1         /// <summary>
     2         /// 添加權限
     3         /// </summary>
     4         private void InsertRoleName()
     5         {
     6             if (ltbRoleOutList.SelectedIndex != -1)
     7             {
     8                 List<string> items = GetLeftSelectedList();
     9 
    10                 //int nCount = items.Count;
    11                 if (items.Count > 0)
    12                 {
    13                     //for (int i = 0; i < nCount; i++)
    14                     foreach (var item in items)
    15                     {
    16                         MoveRight(item);
    17                     }
    18                 }
    19             }
    20         }
    21 
    22         /// <summary>
    23         /// 移除權限
    24         /// </summary>
    25         /// <param name="items"></param>
    26         private void DeleteRoleName()
    27         {
    28             if (ltbRoleInList.SelectedIndex != -1)
    29             {
    30                 List<string> items = GetRightSelectedList();
    31                 //int nCount = items.Count;
    32                 if (items.Count > 0)
    33                 {
    34                     //for (int i = 0; i < nCount; i++)
    35                     foreach (var item in items)
    36                     {
    37                         MoveLeft(item);
    38                     }
    39                 }
    40             }
    41         }
    42 
    43         /// <summary>
    44         /// 向右邊插入一項
    45         /// </summary>
    46         /// <param name="roleName"></param>
    47         private void MoveRight(string roleName)
    48         {
    49             ltbRoleInList.Items.Add(roleName);
    50             ltbRoleOutList.Items.Remove(roleName);
    51         }
    52 
    53         /// <summary>
    54         /// 向左邊插入一項
    55         /// </summary>
    56         /// <param name="roleName"></param>
    57         private void MoveLeft(string roleName)
    58         {
    59             ltbRoleOutList.Items.Add(roleName);
    60             ltbRoleInList.Items.Remove(roleName);
    61         }

    好吧,是四个,前面两个才是主角,后面两个是被它们调用的。既然方法已经写完了,那么通过这几个方法,我们就可以进行接下来的操作了,下面我把每个按钮的动作都分开来写

    4、

    1         /// <summary>
    2         /// 添加選中的權限
    3         /// </summary>
    4         /// <param name="sender"></param>
    5         /// <param name="e"></param>
    6         private void btnInOne_Click(object sender, EventArgs e)
    7         {
    8             InsertRoleName();
    9         }

    5、

    1         /// <summary>
    2         /// 移除選中的權限
    3         /// </summary>
    4         /// <param name="sender"></param>
    5         /// <param name="e"></param>
    6         private void btnOutOne_Click(object sender, EventArgs e)
    7         {
    8             DeleteRoleName();
    9         }

    6、

     1         /// <summary>
     2         /// 添加所有的權限
     3         /// </summary>
     4         /// <param name="sender"></param>
     5         /// <param name="e"></param>
     6         private void btnInAll_Click(object sender, EventArgs e)
     7         {
     8             //無非就是操作前,先把左側權限全部選中,一個遍歷搞定
     9             int lCount = ltbRoleOutList.Items.Count;
    10             for (int i = 0; i < lCount; i++)
    11             {
    12                 ltbRoleOutList.SetSelected(i, true);
    13             }
    14             InsertRoleName();
    15         }

    7、

     1         /// <summary>
     2         /// 移除所有的權限
     3         /// </summary>
     4         /// <param name="sender"></param>
     5         /// <param name="e"></param>
     6         private void btnOutAll_Click(object sender, EventArgs e)
     7         {
     8             //同理,就是操作前,先把右側權限全部選中,一個遍歷搞定
     9             int lCount = ltbRoleInList.Items.Count;
    10             for (int i = 0; i < lCount; i++)
    11             {
    12                 ltbRoleInList.SetSelected(i, true);
    13             }
    14             DeleteRoleName();
    15         }

     8、当双击 ltbRoleOutList 时,会把被双击(被选中)项添加到右侧列表中:

    1         /// <summary>
    2         /// 雙擊添加某項權限嘛
    3         /// </summary>
    4         /// <param name="sender"></param>
    5         /// <param name="e"></param>
    6         private void ltbRoleOutList_DoubleClick(object sender, EventArgs e)
    7         {
    8             InsertRoleName();
    9         }

     9、当双击 ltbRoleInList 时,会把被双击(被选中)项添加到左侧列表中: 

    1         /// <summary>
    2         /// 雙擊移除權限
    3         /// </summary>
    4         /// <param name="sender"></param>
    5         /// <param name="e"></param>
    6         private void ltbRoleInList_DoubleClick(object sender, EventArgs e)
    7         {
    8             DeleteRoleName();
    9         }

    10、最后,当移动结束之后,就要单击“”将数据保存至数据库,然后整个过程就完成了,由于数据库设计因人而异,所以下面这部份我只列出原理,核心数据库操作就不写了,详见代码:

     1         private void btnSave_Click(object sender, EventArgs e)
     2         {
     3             //系統自動全選
     4             int lCount = ltbRoleInList.Items.Count;
     5             for (int i = 0; i < lCount; i++)
     6             {
     7                 ltbRoleInList.SetSelected(i, true);
     8             }
     9 
    10             //然后獲取分配的列表
    11             List<string> saveList = GetRightSelectedList();
    12             try
    13             {
    14                 //調用寫好的方法移除該用戶的所有權限,然后重新Insert
    15                 oCimUserRole.DeleteSysUserInRole();
    16 
    17                 foreach (var item in saveList)
    18                 {
    19                     oCimUserRole.roleName = item.ToString();    //oCimUserRole.roleName 是權限名稱,這個需要傳進去(這里要視你的項目具體而定的)
    20                     oCimUserRole.InsertSysUserInRole();         //往數據庫插入一條記錄
    21                 }
    22                 MessageBox.Show("保存成功!", "提示");
    23             }
    24             catch (Exception)
    25             {
    26                 MessageBox.Show("保存失敗!", "提示");
    27                 throw;
    28             }
    29         }

    好了,谢谢阅读,如果觉得有用,记得顶一个,呵呵。

  • 相关阅读:
    省市区三级联动
    VUE项目PC端实现自适应rem
    (课堂笔记)第十三章GLSB涉及负载均衡算法
    LTM理解及配置笔记记录
    实验演示---GSLB部分(DC1)
    F5实验模拟拓扑
    (课堂笔记)第十三章:DNS 全局站点
    AbstractList类_Iterator内部类
    Oracle 时间格式化异常:无效数字
    Maven库镜像
  • 原文地址:https://www.cnblogs.com/seasons1987/p/2995884.html
Copyright © 2020-2023  润新知