Foxtable(狐表)用户栏目专家坐堂 → 分享:目录树权限管理示例


  共有27069人关注过本帖树形打印复制链接

主题:分享:目录树权限管理示例

美女呀,离线,留言给我吧!
yangming
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
分享:目录树权限管理示例  发帖心情 Post By:2011/8/25 12:59:00 [显示全部帖子]

贴子已被锁定

  前两天看到论坛有朋友提出这个问题,我做了一个示例,分享给大家.

要点是:

1.在打开目录树窗口时并不加载目录树,而是通过选择用户来加载目录树,其目录树的来源是:用户表

2.用户表的格式与原贺老师的权限管理不同,我是横向的,每个用户一行,并且我用的是二级列标题,也就是帮助中所说的多层表头的问题.这就给目录树勾选时有一定的难度.

3.目录树与用户表是同步更新,也就是说,在加载目录树时,将某一用户的资料加到目录树中,当在目录树上有更改时,同步更新到用户表中,无需再做其它的操作.

4.由于目录树加载时是根据单列或多列自动加载的,而用户表又是横向的,那如何处理呢?所以在此我做了一个过渡表,在选择用户时,同步将用户表中的逻辑列的列名称加到这个过渡表:权限管理表中,并对此表进行操作.

5.在将权限表中的A列加载到目录树中时,遇到一个问题,就是目录树的AfterCheckNode事件中有代码,正好与我当前的操作有冲突,怎么样才能在我进行当前操作时不让目录树执行此代码呢?我使用了一个全局变量:打开,就解决问题了,呵.

为了及时看到操作的结果,我将窗体放在了权限表中,狐友也可以放到用户表中,大家有什么好的建议和意见,请及时提出.

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:目录树权限管理.table


图片点击可在新窗口打开查看此主题相关图片如下:用户表.jpg
图片点击可在新窗口打开查看


 


图片点击可在新窗口打开查看此主题相关图片如下:窗口.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2011-8-25 14:13:03编辑过]

[本帖被加为精华]
 回到顶部
美女呀,离线,留言给我吧!
yangming
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
  发帖心情 Post By:2011/8/25 15:42:00 [显示全部帖子]

以下是引用youyuweinihao在2011-8-25 14:21:00的发言:

权限设置时选择用户这一块还可以在改善

可以按GROUP(就是部门或分公司)ISROLE(就是在公司的职位)可以同时对一个部门、或多个人进行权限管理的设置。把人员的管理也作出像杨老师做的权限管理窗口一样。

作出目录树形式,前面可以打勾选择要设置的人员或部门。

这样是不是更完美。

可以试试看,你是否给一个图样?

初步的想法:如是多人,是否可以加一个用户组列?然后对同一个组的多个人进行设置

[此贴子已经被作者于2011-8-25 15:43:07编辑过]

 回到顶部
美女呀,离线,留言给我吧!
yangming
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
  发帖心情 Post By:2011/8/25 17:19:00 [显示全部帖子]

看楼上的东东,头都晕了,呵

 回到顶部
美女呀,离线,留言给我吧!
yangming
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
  发帖心情 Post By:2011/8/25 21:11:00 [显示全部帖子]

谢谢CZY版主,呵!好好研究一下.

[此贴子已经被作者于2011-8-25 21:11:35编辑过]

 回到顶部
美女呀,离线,留言给我吧!
yangming
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
  发帖心情 Post By:2011/8/25 21:20:00 [显示全部帖子]

StopRedraw 和 ResumeRedraw 这两个函数用的好!代码精简的好!

 回到顶部
美女呀,离线,留言给我吧!
yangming
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
  发帖心情 Post By:2011/8/26 20:57:00 [显示全部帖子]

以下是引用狐狸爸爸在2011-8-26 7:25:00的发言:
也可以不用过度表的,我做个例子给大家。

好啊,我本来也不想用过度表的,可是功力不够啊,搞了几个小时都不行,所以只好过度了,呵


 回到顶部
美女呀,离线,留言给我吧!
yangming
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
  发帖心情 Post By:2011/8/26 20:58:00 [显示全部帖子]

以下是引用youyuweinihao在2011-8-26 10:55:00的发言:
C和Y版主,做的实例当中,直接对人事管理这个一级模块前打勾都会报错。

这个问题是没注意到,呵,我再看看


 回到顶部
美女呀,离线,留言给我吧!
yangming
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
  发帖心情 Post By:2011/8/26 22:19:00 [显示全部帖子]

目录树的AfterCheckNode事件代码改成这样试试

 

e.Form.StopRedraw()
Dim r As DataRow = DataTables("用户").Find("用户名 = '" & e.Form.Controls("ComboBox1").Value & "'")
If r IsNot Nothing And e.Node.Level > 0 Then
    r(e.Node.FullPath.Replace("\","_")) = e.Node.Checked
Else
For Each nd As WinForm.TreeNode In e.Node.AllNodes
    nd.Checked  = e.Node.Checked
Next
End If

e.Form.ResumeRedraw()


 回到顶部