以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  不取其他表已经被锁定的行  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=175686)

--  作者:wukangppbb
--  发布时间:2022/3/15 14:32:00
--  不取其他表已经被锁定的行
某列用了列表项目,从其他表取值,怎么设置不取其他表已经被锁定的行的值?
--  作者:有点蓝
--  发布时间:2022/3/15 15:16:00
--  
http://www.foxtable.com/webhelp/topics/1457.htm

比如

If e.IsFocusCell Then \'如果是焦点所在单元格
    
If e.Col.Name = "县市" Then \'如果正在编辑的是县市列
        \'从行政区域表提取该省市的县市作为列表项目

        e.Col.Combolist = 
DataTables("行政区域").GetComboListString("县市""_locked = false")
    
End If
End
 
If

--  作者:wukangppbb
--  发布时间:2022/3/15 17:13:00
--  下面这句我写在DataColChanging 里面好像没效果
下面这句我写在DataColChanging 里面好像没效果


Select Case e.DataCol.name
Case "模块"
Dim mk As String
If e.DataCol.Name= "模块" Then
mk = e.NewValue
Else
mk  = e.DataRow("模块名称")
End If
If mk > "" Then
If e.DataTable.Find("模块= \'" & mk & "\'") IsNot Nothing AndAlso Tables("模块").Current.DataRow.Locked  = True  Then
MessageBox.Show("模块已被锁定行,无法被评估?","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
e.Cancel = True
End If
End If
End Select

--  作者:有点蓝
--  发布时间:2022/3/15 17:20:00
--  
表事件里不要使用Current

If mk > "" Then
dim dr as datarow = e.DataTable.Find("模块= \'" & mk & "\'")
If  dr IsNot Nothing AndAlso dr.Locked  = True  Then
MessageBox.Show("模块已被锁定行,无法被评估?","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
e.Cancel = True
End If
End If
End Select


--  作者:wukangppbb
--  发布时间:2022/3/16 17:26:00
--  写在DataColChanging里面没效果

DataColChanging:


Select Case e.DataCol.name
Case "内控模块"
Dim nkmk As String
If e.DataCol.Name= "内控模块" Then
nkmk = e.NewValue
Else
nkmk  = e.DataRow("内控模块名称")
End If
If nkmk > "" Then
Dim dr As DataRow = e.DataTable.Find("内控模块= \'" & nkmk & "\'")
If  dr IsNot Nothing AndAlso dr.Locked  = True  Then
MessageBox.Show("模块已被锁定行,无法被评估?","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
e.Cancel = True
End If
End If
End Select

--  作者:有点蓝
--  发布时间:2022/3/16 17:30:00
--  
要达到什么效果?
--  作者:wukangppbb
--  发布时间:2022/3/17 9:46:00
--  无法提示
“内控模块”列属于B表,“内控模块名称”列属于A表,A表存在被锁定的行,B表能找到A表存在被锁定的行,但是选择的时候,无法提示“模块已被锁定行,无法被评估?”。
--  作者:有点蓝
--  发布时间:2022/3/17 9:53:00
--  
这个意思和您写的代码对不上号。换个方式,请详细描述一下要做什么功能?
--  作者:wukangppbb
--  发布时间:2022/3/17 10:07:00
--  
简单一点的意思就是:A表的列内容来自B表的列,但是B表列存在被锁定的行,A表的列内容取值B表列内容,取值B表被锁定的行的时候提示不能选定。


“内控模块”列属于风险数据库表,“内控模块名称”列属于内控模块表,内控模块表存在被锁定的行,
风险数据库表内控模块”列取值于内控模块表内控模块名称”列,但是选择的时候,需要提示“模块已被锁定行,无法被评估?”。

MainTableChanged如果这么写,好像也可以:
If MainTable.Name = "风险数据库" Then 
Tables("风险数据库").Cols("内控模块").Combolist = DataTables("内控模块").GetComboListString("内控模块名称")
End If

但是怎么提示“模块已被锁定行,无法被评估?

--  作者:有点蓝
--  发布时间:2022/3/17 10:15:00
--  
如果是要控制不能选择锁定的下拉项目,那就应该显示下拉项目的时候就排除掉锁定的项目,不显示在下拉列表中供选择,请参考2楼的用法