以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  锁定指定列  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=161005)

--  作者:nxqtxwz
--  发布时间:2021/3/2 7:49:00
--  锁定指定列

请问老师,想通过审核后锁定记录的指定的几列,但这样的话,新增的行这些列也不能编辑了,这个问题怎么解决呢。

就是通过审核的记录锁定指定的几列,不是所有的列。还要允许新增的行的所有列都可编辑,怎么实现呢?


--  作者:有点蓝
--  发布时间:2021/3/2 8:40:00
--  
参考:http://www.foxtable.com/webhelp/topics/0605.htm
--  作者:nxqtxwz
--  发布时间:2021/3/2 14:54:00
--  

我自己也蒙了,不知怎么写了。

Select Case e.Col.name
    Case "审核"
        If  User.Group <> "政教处" Then
            e.cancel = True
        End If
    Case "学生违纪","班级","姓名","违纪时间","违纪地点","违纪类型","处理结果","处理日期","考察结束时间","相关资料","情况说明","记录人"
        If  "?" & e.Row("记录人") & "?" Like "*?" & User.Name & "?*"  Then
        Else
            e.Cancel =True
        End If

 

本意是违纪记录只有记录人可以编辑,如果审核列由政教处选择TRUE后,这一行就锁定,不能动了。但这样写,新增行也不能编辑了。



--  作者:有点蓝
--  发布时间:2021/3/2 14:59:00
--  
"记录人"是多值字段?存储的是什么内容?截图看看

意思是这些列新增的行就算审核后也能编辑?

--  作者:nxqtxwz
--  发布时间:2021/3/2 15:07:00
--  

老师,有时是多个人,有时是一个人。审核完了后不能改动

上面的问题我加一个 “If e.Row.IsNull("班级") = False Then”语句解决,但不知是不是最好的办法。

另想着“审核”这一列,只有政教处有审核权,审核完了后,这一条记录谁都不能改了,代码怎么改呢?

[此贴子已经被作者于2021/3/2 15:07:50编辑过]

--  作者:有点蓝
--  发布时间:2021/3/2 15:10:00
--  
后面加一句

        If  e.Row("审核")  = true Then
            e.cancel = True
        End If

--  作者:nxqtxwz
--  发布时间:2021/3/2 15:46:00
--  

老师您好,我想简单了。空白记录只要填写了班级立即锁定,其它列也填写不了。

 

Select Case e.Col.name
    Case "审核"
        If  User.Group <> "政教处" Then
            e.cancel = True
        End If
    Case "学生违纪","班级","姓名","违纪时间","违纪地点","违纪类型","处理结果","处理日期","考察结束时间","相关资料","情况说明","记录人"
       
        If e.Row.IsNull("班级") = False Or e.Row.IsNull("姓名") = False  Then
            If  "?" & e.Row("记录人") & "?" Like "*?" & User.Name & "?*"  Then
            Else
                e.Cancel =True
            End If
        End If
       
End Select


--  作者:有点蓝
--  发布时间:2021/3/2 15:54:00
--  
建议改一下分隔符,不要使用问号做记录人的分隔符,改为逗号之类的
Select Case e.Col.name
    Case "审核"
        If  User.Group <> "政教处" Then
            e.cancel = True
        End If
    Case "学生违纪","班级","姓名","违纪时间","违纪地点","违纪类型","处理结果","处理日期","考察结束时间","相关资料","情况说明","记录人"
            If  "," & e.Row("记录人") & "," Like "*," & User.Name & ",*"  Then
            Else
                e.Cancel =True
            End If
End Select

另外这个事件还有其它代码?

--  作者:nxqtxwz
--  发布时间:2021/3/2 16:13:00
--  

有其它代码呢,下面是所有的代码。

If e.IsFocusCell Then  \'如果是焦点所在单元格
    If e.Col.Name = "姓名" Then  \'如果正在编辑的是县市列
        \'从行政区域表提取该省市的县市作为列表项目
        e.Col.Combolist = DataTables("学生名单").GetComboListString("学生姓名", "[班级] = \'" & e.Row("班级") & "\'")
    End If
End  If

\'If e.Row("审核") = True AndAlso User.Group <> "政教处" Then
\'    e.Cancel = True
\'End  If

Select Case e.Col.name
    Case "审核"
        If  User.Group <> "政教处" Then
            e.cancel = True
        End If
    Case "学生违纪","班级","姓名","违纪时间","违纪地点","违纪类型","处理结果","处理日期","考察结束时间","相关资料","情况说明","记录人"
       
        If e.Row.IsNull("班级") = False  AndAlso  e.Row.IsNull("姓名") = False  AndAlso  e.Row.IsNull("违纪时间") = False   AndAlso  e.Row.IsNull("违纪地点") = False  AndAlso  e.Row.IsNull("违纪类型") = False  AndAlso  e.Row.IsNull("处理结果") = False  AndAlso  e.Row.IsNull("处理日期") = False  AndAlso  e.Row.IsNull("情况说明") = False AndAlso  e.Row.IsNull("记录人") = False             Then
            If  "?" & e.Row("记录人") & "?" Like "*?" & User.Name & "?*"  Then
            Else
                e.Cancel =True
            End If
        End If
       
End Select


If  e.Row("审核")  = True Then
    e.cancel = True
End If


--  作者:有点蓝
--  发布时间:2021/3/2 16:17:00
--  
不要使用问号做分隔符

另外e.Row.IsNull("班级") = False这些判断是干嘛用的,填写了数据就不能再编辑?