以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  代码的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=56441)

--  作者:爱相随
--  发布时间:2014/9/5 10:49:00
--  代码的问题
老师,我想在项目事件项目的AfterOpenProject事件中设置代码,使打开的表ZJSQB,根据表中“付款单位”列的值和登录用户的角色不同看不见不同的列。比如:当ZJSQB表的“付款单位”列的值是“高科控股集团”,且登录的用户的角色是“子公司财务”时,则他看不见“财务1”“财务2”“财务3”这三列,当“付款单位”列的值是其他值时,则用户角色为“总工办”或“集团财务”“业务副总”“资金副总”“董事长”等看不见“审核”“意见”“第十列”“第十一列”。下面的代码不对,错在哪里呢,请老师指导

If e.DataTableName = "ZJSQB" Then如果打开的是ZJSQB

If e.DataCol.Name = "付款单位" Then‘如果变化的是付款单位列

Dim K As String = e.DataRow("付款单位")‘定义为字符串

Select Case K

            Case "高科控股集团"

                If User.IsRole ("子公司财务") Then

Tables("ZJSQB").Cols.Remove("财务1")
       
                Tables("ZJSQB").Cols.Remove("财务2")
       
                Tables("ZJSQB").Cols.Remove("财务3")

Tables("ZJSQB").Cols.Remove("财务4")
Case "
高科开发建设","高科置业发展","贵州望城投资"

If User.IsRole( "总工办")  OrElse User.IsRole( "集团财务")OrElse User.IsRole( "业务副总")OrElse User.IsRole( "资金副总")OrElse User.IsRole( "集团董事长")Then

Tables("ZJSQB").Cols.Remove("总工办")
       
                Tables("ZJSQB").Cols.Remove("JTZGB1")
       
                Tables("ZJSQB").Cols.Remove("JTZGB2")

Tables("ZJSQB").Cols.Remove("JTZGB3")

 

Tables("ZJSQB").Cols.Remove("集团财务1")
       
                Tables("ZJSQB").Cols.Remove("JTCWB1")
       
                Tables("ZJSQB").Cols.Remove("JTCWB2")

Tables("ZJSQB").Cols.Remove("JTCWB3")

Tables("ZJSQB").Cols.Remove("集团副总")
       
                Tables("ZJSQB").Cols.Remove("资金副总")
       
                Tables("ZJSQB").Cols.Remove("董事长1")

Tables("ZJSQB").Cols.Remove("董事长2")

Tables("ZJSQB").Cols.Remove("董事长3")

               END IF

          END SELECT

      END IF

END IF

 


--  作者:有点甜
--  发布时间:2014/9/5 10:55:00
--  

 无法做到你这种限制的,这样做也是没有意义的。

 

 每一行的单位都可以不同,点不同行,那么就能看到不同的列,无法做到你预想的看不到数据的效果。


--  作者:爱相随
--  发布时间:2014/9/5 10:57:00
--  
那如果改成:当ZJSQB表的“付款单位”列的值是“高科控股集团”,且登录的用户的角色是“子公司财务”时,则他不能编辑“财务1”“财务2”“财务3”这三列,当“付款单位”列的值是其他值时,则用户角色为“总工办”或“集团财务”“业务副总”“资金副总”“董事长”等不能编辑“审核”“意见”“第十列”“第十一列”。且不能编辑的列变成灰色,这样可以吗??
[此贴子已经被作者于2014-9-5 10:58:00编辑过]

--  作者:有点甜
--  发布时间:2014/9/5 11:01:00
--  

 去编写prepareEdit事件

 

http://www.foxtable.com/help/topics/2255.htm

 

 

 


--  作者:爱相随
--  发布时间:2014/9/5 11:06:00
--  
这样做是是使流程能够通用,像我们单位的流程确实有点复杂,我们公司的项目分两种,一种是由集团核算,但现场管理是由各子公司管理,还有一种就是由子公司核算管理的项目。如果由子公司核算管理的项目,则审核流程是不经过集团总部的相关部门,但如果是由集团核算,子公司管理的项目,则是由子公司申请发起流程,子公司财务部门不参加审批流程,子公司的其他部门要参加流程,然后集团总部相关部门要参加流程。这样就是,登录人所属的工作组是子公司,而付款单位是集团总部,所属工作组不一致。审批流程就有区别。付款单位和发起单位是一致的,一般不通过集团相关部门审核;如果发起是子公司,付款由集团总部付款的,则前面的流程减掉子公司的财务部门,后面再加上集团的相关部门。
[此贴子已经被作者于2014-9-5 11:08:53编辑过]

--  作者:有点甜
--  发布时间:2014/9/5 11:08:00
--  
 自己看4楼。
--  作者:有点甜
--  发布时间:2014/9/5 11:11:00
--  

如果是要隐藏列,就去编写表的currenChanged事件

 

Dim r As Row = e.Table.Current
If r IsNot Nothing Then
    Dim K As String = r("付款单位") \'定义为字符串
    Dim flag As Boolean = True
    Select Case K
       
        Case "高科控股集团"
           
            If User.IsRole ("子公司财务") Then
                flag = False
            End If
            Tables("ZJSQB").Cols("财务1").Visible = flag
            Tables("ZJSQB").Cols("财务2").Visible = flag
            Tables("ZJSQB").Cols("财务3").Visible = flag
           
            Tables("ZJSQB").Cols("财务4").Visible = flag
        Case "高科开发建设","高科置业发展","贵州望城投资"
            If User.IsRole( "总工办")  OrElse User.IsRole( "集团财务")OrElse User.IsRole( "业务副总")OrElse User.IsRole( "资金副总")OrElse User.IsRole( "集团董事长")Then
                flag = False
            End If
            Tables("ZJSQB").Cols("总工办").Visible = flag
            Tables("ZJSQB").Cols("JTZGB1").Visible = flag
            Tables("ZJSQB").Cols("JTZGB2").Visible = flag
           
            Tables("ZJSQB").Cols("JTZGB3").Visible = flag
           
           
           
            Tables("ZJSQB").Cols("集团财务1").Visible = flag
            Tables("ZJSQB").Cols("JTCWB1").Visible = flag
            Tables("ZJSQB").Cols("JTCWB2").Visible = flag
           
            Tables("ZJSQB").Cols("JTCWB3").Visible = flag
           
            Tables("ZJSQB").Cols("集团副总").Visible = flag
            Tables("ZJSQB").Cols("资金副总").Visible = flag
            Tables("ZJSQB").Cols("董事长1").Visible = flag
           
            Tables("ZJSQB").Cols("董事长2").Visible = flag
           
            Tables("ZJSQB").Cols("董事长3").Visible = flag
           
    End Select
   
End If

[此贴子已经被作者于2014-9-5 11:11:55编辑过]

--  作者:爱相随
--  发布时间:2014/9/5 14:07:00
--  
老师,我想通过菜单功能打开相关的表,比如菜单按钮是项目信息,点击后则打开项目信息表,其他表不显示,请问怎么处理,谢谢
--  作者:有点甜
--  发布时间:2014/9/5 14:38:00
--  

For Each t As Table In Tables
    If t.Name = "表A" Then
        t.Visible = True
    Else
        t.Visible = False
    End If
Next