以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]关于让不同用户编辑不同列的疑问  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=76998)

--  作者:ehomecd
--  发布时间: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

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


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


--  作者:大红袍
--  发布时间: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
--  发布时间: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

--  作者:大红袍
--  发布时间: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
--  发布时间: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编辑过]

--  作者:大红袍
--  发布时间: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