以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]prepareedit删除行的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=153002)

--  作者:chnfo
--  发布时间:2020/7/28 15:18:00
--  [求助]prepareedit删除行的问题
帮助里的prepareedit事件最下面加了isfocuscell,说可以提高效率。现在遇到一个问题,如果下拉列在第一列的时候,如果选中行号,右键删除,界面就进入死亡模式,不动了。但是如果不在第一列,就能立马删除成功。但有时候,下拉列确需放在第一列咋办?
--  作者:chnfo
--  发布时间:2020/7/28 15:21:00
--  
补充:我用的datamap,还没试combolist
--  作者:有点蓝
--  发布时间:2020/7/28 15:41:00
--  
prepareedit事件不能使用动态字典,和动态目录树,会卡死,如果要使用,放到AfterSelChange

Dim cl As Col = e.Table.Cols(e.NewRange.ColSel)
If cl.Name = "第四列" Then 
    Dim dmp As New TableDataMap
    dmp.DataTable = "表A" \'指定数据来源表
    dmp.ValueCol = "第一列" \'指定取值列
    dmp.DisplayCol = "第一列" \'指定显示列
    \'指定下拉列表时显示哪些列的数据
    dmp.ListCols = "第一列"
    cl.DataMap = dmp.CreateDataMap() \'生成并设置DataMap
End If


--  作者:chnfo
--  发布时间:2020/7/28 20:01:00
--  
如果希望选中行的某一列如"Type"列的值=1的时候,就不允许在“第四列”做操作,应当在哪里写代码呢?
Dim c As Col = e.Table.Cols(e.NewRange.ColSel)
Select Case c.name
    Case "X"
        Dim r As Row = e.Table.Rows(e.NewRange.Rowsel) \'获得新选择的行
            Dim dmp As New TableDataMap
            dmp.DataTable = "A"
            dmp.ValueCol = "C"
            dmp.DisplayCol = "T"
            dmp.ListCols = "C,T,U"
            dmp.Sort = "_SortKey"
            c.DataMap = dmp.CreateDataMap()
End Select

prepareedit中
if e.col.name = "X" andalso e.row("Type") = 1 then 
e.cancel = true
end if 

----这样似乎可以
[此贴子已经被作者于2020/7/28 20:15:05编辑过]

--  作者:有点蓝
--  发布时间:2020/7/28 20:16:00
--  
Type如果是字符列

if e.col.name = "X" andalso e.row("Type") = "1" then 
e.cancel = true
end if