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

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

 

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

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         }

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

你可能感兴趣的:(WinForm)