以文本方式查看主题

-  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
    dc.AllowEdit = False
Next


--  作者:天若千颖
--  发布时间: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