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


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

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

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


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

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

 回到顶部
帅哥哟,离线,有人找我吗?
czy
  22楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33951 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2011/8/26 0:46:00 [只看该作者]

在权限表中,这样更直观一点。

 

If e.Sender.Value = "" Then
    Return
End If

 

Dim dr As DataRow = DataTables("用户").Find("用户名 = '" & e.Sender.Value & "'")
If dr IsNot Nothing Then
    For Each dr1 As DataRow In DataTables("权限管理").DataRows
        dr1("A") = dr(dr1("权限细目").Replace("\","_"))
    Next
End If

 

Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1")
tr.CreateTree("权限管理","权限细目","\","","_Identify")
For Each nd As WinForm.TreeNode In tr.AllNodes
    For Each dr2 As Row In Tables("权限管理").Rows
        Dim Parts() As String = dr2("权限细目").Split("\")
        If nd.Text = Parts(1) Then
            nd.Checked = dr2("A")
        End If
    Next
Next
tr.ExpandAll()

 

DataTables("权限管理").DataCols("权限细目").Caption = e.Sender.Value & " 权限细目"
DataTables("权限管理").BuildHeader()


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  23楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/8/26 7:25:00 [只看该作者]

也可以不用过度表的,我做个例子给大家。

 回到顶部
帅哥哟,离线,有人找我吗?
youyuweinihao
  24楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:219 积分:1890 威望:0 精华:0 注册:2011/6/10 9:12:00
  发帖心情 Post By:2011/8/26 10:55:00 [只看该作者]

C和Y版主,做的实例当中,直接对人事管理这个一级模块前打勾都会报错。

 回到顶部
帅哥哟,离线,有人找我吗?
czy
  25楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33951 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2011/8/26 11:02:00 [只看该作者]

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

 

呵呵,这个问题我倒没留意,既然你发现了,这道题就留给你了图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
youyuweinihao
  26楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:219 积分:1890 威望:0 精华:0 注册:2011/6/10 9:12:00
  发帖心情 Post By:2011/8/26 15:39:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20110826153756.png
图片点击可在新窗口打开查看
我感觉添加这段代码就好了,可是会跳出如图的BUG,这个不会处理

For Each nd As WinForm.TreeNode In e.Node.AllNodes
   
nd.Checked  = e.Node.Checked
Next


 回到顶部
美女呀,离线,留言给我吧!
yangming
  27楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  28楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  29楼 | 信息 | 搜索 | 邮箱 | 主页 | 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()


 回到顶部
帅哥哟,离线,有人找我吗?
e-png
  30楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1695 积分:10725 威望:0 精华:0 注册:2009/10/25 16:45:00
  发帖心情 Post By:2011/8/26 22:58:00 [只看该作者]

Checked 后不是可以取得 FullPath 名称吗,在表中找到对应的位置同步一下不就可以了吗。

 回到顶部
总数 40 上一页 1 2 3 4 下一页