以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]窗口功能  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=68888)

--  作者:wusim
--  发布时间:2015/5/27 6:59:00
--  [求助]窗口功能
要求:
1、当确认列不为空,锁定行,只有角色是“电梯审核“,且审核列为空时,可以编辑审核退回意见,只有是角色是批准,且审核列不为空时,可以编辑审批退回意见。

2、当确认列为空,除了审核退回意见列和审批退回意见列,不能编辑。其他列可以编辑。
在prepareEdit写入代码:
Select Case e.Col.name
    Case "审核退回意见", "批准退回意见"
        If e.Row.IsNull("确认") = False Then
            If e.Col.Name = "审核退回意见" Then
                If User.Isrole("电梯审核") = False Or  e.Row.IsNull("审核") = False   Then
                    e.Cancel = True
                End If
            Else If e.Col.Name = "批准退回意见"  Then
                If User.Isrole("审批") = False  Or e.Row.IsNull("审核") = True  Then
                    e.Cancel = True
                End If
            End If
        Else
            e.cancel = True
        End If
    Case Else
        If e.Row.IsNull("确认") = False Then
            e.cancel = True
        End If
End Select

窗口的全局事件Enter事件中设置的代码
Dim ctl As WinForm.Control = e.Sender
If ctl.Name <> "单位查找" AndAlso ctl.Name <> "出厂编号查找" Then
    If Tables("表A").Current.DataRow.SQLGetValue("确认").Gettype.Name = "DBNull" Then  \'确认是空值
        ctl.ReadOnly = BooleanEnum.False \'可以编辑
    Else
        ctl.ReadOnly = BooleanEnum.True \'禁止编辑
    End If
End If

现在我把退回意见的两个列放到窗口中。怎样窗口的全局事件Enter事件中设置的代码结合一起:


[此贴子已经被作者于2015/5/27 7:16:24编辑过]

--  作者:Bin
--  发布时间:2015/5/27 8:34:00
--  
代码是一样的. 把 e.row 改为 tables("表名").current

e.col.name 改为 e.sender.name 

--  作者:大红袍
--  发布时间:2015/5/27 9:13:00
--  
 或者,你可以在datacolchanging事件写代码,代码和prepareEdit的事件基本一致col换成DataCol,row换成DataRow