Foxtable(狐表)用户栏目专家坐堂 → 设置了所有表无法修改,如何让某表的指定列可修改


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

主题:设置了所有表无法修改,如何让某表的指定列可修改

帅哥哟,离线,有人找我吗?
天若千颖
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:682 积分:4871 威望:0 精华:0 注册:2014/6/15 16:01:00
设置了所有表无法修改,如何让某表的指定列可修改  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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) 看看


 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:682 积分:4871 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/8/2 9:51:00 [只看该作者]

版主的意思是,让所有的表禁止修改后,又可以指定某张表的列可以修改?

我用第二种方案,把“项目资料表”,发现其他表禁止复制有效,禁止编辑无效,这是何故?

也就是说

dt.AllowClipBoard = False '有效

dt.AllowEdit=False   '没有生效

[此贴子已经被作者于2017/8/2 10:00:16编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/2 10:02:00 [只看该作者]

以下是引用天若千颖在2017/8/2 9:51:00的发言:
版主的意思是,让所有的表禁止修改后,又可以指定某张表的列可以修改?

 

不是。表格不禁止修改,改成在prepareEdit、startEdit事件控制能否编辑。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/2 10:04:00 [只看该作者]

或者是,一列一列的控制编辑,而不是整个表控制。

 

For Each dc As DataCol In DataTables("表A").datacols
    dc.AllowEdit = False
Next


 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:682 积分:4871 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/8/2 10:05:00 [只看该作者]

那这样太繁琐,一百多张表,不能每张表去写表事件,直能把要开发权限的表排除在外,其他的都禁止编辑。

现在的问题就是,我的第二种方案代码为何没有把禁止编辑给限制掉,却能够禁止复制。

 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:682 积分:4871 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By: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


版主,上述代码已经禁止了数据表的复制功能,说明判断是没有问题的,但是为什么没有禁止掉编辑功能呢?


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/2 10:28:00 [只看该作者]

 如果要对某一列进行控制,你必须用5楼的方法,一列一列的禁止,而不是整个表禁止。

 

 你不是可以编写全局表事件的? http://www.foxtable.com/webhelp/scr/0671.htm

 


 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:682 积分:4871 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By: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



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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/2 16:38:00 [只看该作者]

这句代码,不用写在prepareedit事件,你写到AfterOpenProject或者AfterLoadTableSetting

 

For Each dt As DataTable In DataTables
    dt.AllowClipBoard = False
Next

 回到顶部