以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 设置了所有表无法修改,如何让某表的指定列可修改 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=104623) |
-- 作者:天若千颖 -- 发布时间:2017/8/2 8:52:00 -- 设置了所有表无法修改,如何让某表的指定列可修改 版主,在项目AfterProjectLoad中禁止了特定用户组修改数据表 If
User.IsRole("数据管理") Then DataTables.AllowEdit
= True For Each dt As DataTable In DataTables dt.AllowClipBoard = True Next Else DataTables.AllowEdit
= False For Each dt As DataTable In DataTables dt.AllowClipBoard = False Next End If 是否可以让“项目资料表”中的“批量下载”列又可以修改呢? 我用以下代码想把“项目资料表”排除在修改权限之外,但是当用户不具有“数据管理”角色时,所有的表都可以修改了。哪里错了? If User.IsRole("数据管理") Then DataTables.AllowEdit = True For Each dt As DataTable In DataTables dt.AllowClipBoard = True Next Else For Each dt As DataTable In DataTables If dt.Name <> "项目资料表" Then \'除项目资料表之外,其他数据表均无法修改 dt.AllowClipBoard = False dt.AllowEdit=False End If Next End If [此贴子已经被作者于2017/8/2 9:26:30编辑过]
|
-- 作者:有点甜 -- 发布时间:2017/8/2 9:48:00 -- 在表里面限制
http://www.foxtable.com/webhelp/scr/0615.htm
http://www.foxtable.com/webhelp/scr/0605.htm
你写的代码没问题,你弹出 msgbox(User.roles) 看看 |
-- 作者:天若千颖 -- 发布时间:2017/8/2 9:51:00 -- 版主的意思是,让所有的表禁止修改后,又可以指定某张表的列可以修改? 我用第二种方案,把“项目资料表”,发现其他表禁止复制有效,禁止编辑无效,这是何故? 也就是说 dt.AllowClipBoard = False \'有效 dt.AllowEdit=False \'没有生效 [此贴子已经被作者于2017/8/2 10:00:16编辑过]
|
-- 作者:有点甜 -- 发布时间:2017/8/2 10:02:00 -- 以下是引用天若千颖在2017/8/2 9:51:00的发言:
版主的意思是,让所有的表禁止修改后,又可以指定某张表的列可以修改?
不是。表格不禁止修改,改成在prepareEdit、startEdit事件控制能否编辑。 |
-- 作者:有点甜 -- 发布时间:2017/8/2 10:04:00 -- 或者是,一列一列的控制编辑,而不是整个表控制。
For Each dc As DataCol In DataTables("表A").datacols |
-- 作者:天若千颖 -- 发布时间:2017/8/2 10:05:00 -- 那这样太繁琐,一百多张表,不能每张表去写表事件,直能把要开发权限的表排除在外,其他的都禁止编辑。 现在的问题就是,我的第二种方案代码为何没有把禁止编辑给限制掉,却能够禁止复制。
|
-- 作者:天若千颖 -- 发布时间:2017/8/2 10:27:00 -- For Each dt As DataTable In DataTables If dt.Name <> "项目资料表" Then \'除项目资料表之外,其他数据表均无法修改 dt.AllowClipBoard = False dt.AllowEdit= False End If Next 版主,上述代码已经禁止了数据表的复制功能,说明判断是没有问题的,但是为什么没有禁止掉编辑功能呢? |
-- 作者:有点甜 -- 发布时间:2017/8/2 10:28:00 -- 如果要对某一列进行控制,你必须用5楼的方法,一列一列的禁止,而不是整个表禁止。
你不是可以编写全局表事件的? http://www.foxtable.com/webhelp/scr/0671.htm
|
-- 作者:天若千颖 -- 发布时间:2017/8/2 14:44:00 -- 多谢版主,我直接写全局表事件里了。 PrepareEdit事件: If User.IsRole("数据管理") Then For Each dt As DataTable In DataTables dt.AllowClipBoard = False Next If e.Col.Name <> "批量下载" Then e.Cancel = True End If End If |
-- 作者:有点甜 -- 发布时间:2017/8/2 16:38:00 -- 这句代码,不用写在prepareedit事件,你写到AfterOpenProject或者AfterLoadTableSetting
For Each dt As DataTable In DataTables
dt.AllowClipBoard = False
Next
|