以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  列锁定问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=61443)

--  作者:lesliecheung912
--  发布时间:2014/12/12 12:55:00
--  列锁定问题
表A有四列(名称,种类,数量,件数),名称和种类从另一个表中取值,选择名称后种类自动取过来。
当种类 = “水果”时,数量列锁定,件数列解锁,当种类等于其他值时,数量列解锁,件数列锁定。
请问代码应该写在什么事件里,代码应该怎么写呢?

--  作者:Bin
--  发布时间:2014/12/12 14:05:00
--  
在DataColChanged事件和 PrepareEdit 控制

参考




--  作者:lesliecheung912
--  发布时间:2014/12/12 14:46:00
--  
从另外一个表取值可以做到,但是锁定列怎么可以做到啊。如果是在PrepareEdit事件里面写,那得怎么写?
这样不行啊
If e.Col.Name = "产品名称" Then
    If Tables("表A").Current("种类") <> "水果"
        Tables("表A").Cols("数量").AllowEdit = False
        Tables("表A").Cols("数量").AllowEdit = True
    Else
        Tables("表A").Cols("数量").allowedit = True
        Tables("表A").Cols("件数").allowedit = False
    End If
End If

--  作者:Bin
--  发布时间:2014/12/12 14:47:00
--  
你都没有参考帮助按照帮助的去做.

用的是e.cancel=true 

请您先看一下2楼帮助哦

--  作者:lesliecheung912
--  发布时间:2014/12/12 15:02:00
--  
想了半天还是没想明白,劳烦BIN大哥指点迷津
--  作者:有点甜
--  发布时间:2014/12/12 15:05:00
--  

PrepareEdit 事件

 

 If e.Col.Name = "数量" Then

     If e.Row("种类") = "水果" Then e.Cancel = True

 End If

 

 If e.Col.Name = "件数" Then

     If e.Row("种类") <> "水果" Then e.Cancel = True

 End If


--  作者:lesliecheung912
--  发布时间:2014/12/12 15:14:00
--  
我是想锁定列,而不是禁止他编辑,而是给列加个小锁,这样更形象,请问在表事件可以完成这种操作吗?


--  作者:Bin
--  发布时间:2014/12/12 15:19:00
--  
这是不科学的,你这是根据当前行来判断的, 你把整列都锁定了, 那其他行符合条件的怎么办? 自相锚定的需求

只有禁止编辑才合理,  如果希望有标识,可以利用DrawCell事件

--  作者:lesliecheung912
--  发布时间:2014/12/12 15:24:00
--  
明白了,谢谢