Foxtable(狐表)用户栏目专家坐堂 → [求助]关于让不同用户编辑不同列的疑问


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

主题:[求助]关于让不同用户编辑不同列的疑问

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


加好友 发短信
等级:童狐 帖子:267 积分:2562 威望:0 精华:0 注册:2008/11/9 18:30:00
[求助]关于让不同用户编辑不同列的疑问  发帖心情 Post By:2015/11/9 15:07:00 [只看该作者]

[求助]关于让不同用户编辑不同列,帮助的例子是禁止用户编辑指定的列,但有时候是表的列非常多,只允许用户编辑某两列,应该如何写代码效率高些。
帮助的代码是:
为此可将此表的PrepareEdit事件代码设置为:

Select Case User.Name
    Case
"张三",
"李四"
       
Select Case e.Col.Name
            Case
"第一列","第二列","第三列"

                e.Cancel =
True
       
End Select
   
Case "王五", "赵六"
       
Select Case e.Col.Name
            Case
"第四列","第五列","第六列"

                e.Cancel =
True
       
End Select
End
Select
If
e.Col.Name = "第十列" Then
    If User.Name <> "张经理" Then
        e.Cancel =
True
   
End If
End
If

实际应用的时候,将上述代码替换为具体的列名和用户名即可


问题:如果让张三,李四只能编辑一二三列;王五、赵六只能编辑四五六列;张经理可以编辑所有列,应该怎么写代码?


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/11/9 15:17:00 [只看该作者]

e.cancel = False
Select Case User.Name
    Case "张三","李四"
        Select Case e.Col.Name
            Case "第一列","第二列","第三列"
                e.Cancel = True
        End Select
    Case "王五", "赵六"
        Select Case e.Col.Name
            Case "第四列","第五列","第六列"
                e.Cancel = True
        End Select
    Case "张经理"
        e.cancel = True
End Select

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


加好友 发短信
等级:童狐 帖子:267 积分:2562 威望:0 精华:0 注册:2008/11/9 18:30:00
  发帖心情 Post By:2015/11/11 15:20:00 [只看该作者]

根据大红袍老师的提示,修改了代码,在表中编辑实现了不同人编辑不同列;但如果窗口中的文本框绑定了锁定字段,仍然可以编辑;而且将文本框的属性选择只读,仍然可以输入数据,请问解决途径?

If e.Table.Name = "游戏个人数据s_龙源宝藏" Then
    e.cancel = True
    Select Case _UserRole
        Case "学生"
            Select Case e.Col.Name
                Case "家庭表现","家长留言"
                    e.Cancel = False
            End Select
        Case "管理员","员工"
            e.cancel = False
    End Select
End If

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/11/11 15:23:00 [只看该作者]

DataColChanging事件。

 

    e.cancel = True

    Select Case _UserRole
        Case "学生"
            Select Case e.DataCol.Name
                Case "家庭表现","家长留言"
                    e.Cancel = False
            End Select
        Case "管理员","员工"
            e.cancel = False
    End Select
 
如果要控制窗口控件,你就必须在currentChanged事件写代码控制,类似
 
 

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


加好友 发短信
等级:童狐 帖子:267 积分:2562 威望:0 精华:0 注册:2008/11/9 18:30:00
  发帖心情 Post By:2015/11/11 15:45:00 [只看该作者]

参考http://www.foxtable.com/help/topics/2342.htm

如果角色是《学生》,只允许编辑【家庭表现】【家庭留言】字段,其他字段锁定,这个其他字段怎么简洁的表示?

Dim ctl As WinForm.Control = e.Sender
Select Case ctl.BindingField
    Case "游戏个人数据s_龙源宝藏.家庭表现", "游戏个人数据s_龙源宝藏.家长留言"
        If _UserRole = "学生" Then
            ctl.ReadOnly = BooleanEnum.False '允许编辑
        Else
            ctl.ReadOnly = BooleanEnum.True '禁止编辑
        End If
End Select
[此贴子已经被作者于2015/11/11 15:46:01编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/11/11 15:47:00 [只看该作者]

Dim ctl As WinForm.Control = e.Sender
Select Case ctl.BindingField
    Case "游戏个人数据s_龙源宝藏.家庭表现", "游戏个人数据s_龙源宝藏.家长留言"
        If _UserRole = "学生" Then
            ctl.ReadOnly = BooleanEnum.False '允许编辑
        Else
            ctl.ReadOnly = BooleanEnum.True '禁止编辑
        End If

     Case Else

           ctl.ReadOnly = BooleanEnum.True '禁止编辑
End Select


 回到顶部