以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  如果在列表中看不到表里已有的项目  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=183055)

--  作者:zhangchi96
--  发布时间:2022/10/23 15:29:00
--  如果在列表中看不到表里已有的项目
我在一个表【表a】的click事件中:
      1、 通过另外一个表dt,得到一个列表
              Dim 原有列表 As List(Of String) = Dt.GetUniqueValues("","姓名")    ,假设这里的姓名有:张三|张三丰|李四|李四德|赵武|赵武王|王六|王六小
      2、【表a】已有记录如下
                    序号    姓名   性别  备注
                     1       张三
                     2       李四 
                     3       赵武
                     4       ??                  
             这里本来可以表示为  e.Col.Combolist = 原有列表
      3、希望在第4条记录录入时,点击姓名,得到一个下拉菜单,这个菜单,不包含已有的姓名:1、张三 2、李四 3、赵武,只有 :张三丰|李四德|赵武王|王六|王六小
             
                  如何求得  e.Col.Combolist = ? 
 请老师指导

[此贴子已经被作者于2022/10/23 15:38:54编辑过]

--  作者:有点蓝
--  发布时间:2022/10/23 20:56:00
--  
Dim 原有列表 As List(Of String) = Dt.GetValues("姓名","姓名 not in(\'" & datatables("表a").GetComboListString("姓名").replace("|","\',\'") & "\')")   
--  作者:zhangchi96
--  发布时间:2022/10/24 9:31:00
--  
我最终的写法,贴一下
If e.Ta_ble.Name = "选项列表" Then
    If For_ms("学期设置窗体").Op_ened()
        If e.Col.Name = "项目3类_年度" Then \'如果正在编辑的是县市列
            e.Col.Co_mbo_list = Dat_aTa_bles("选项列表").Ge_tCo_mboLi_stS_tring("项目3类_年度", " 项目2类 = \'年度\'" , "分类编号" )
        ElseIf e.Col.Name = "项目4类_学期" Then
            e.Col.Co_mbol_ist = "春学期|秋学期"
        End If
    ElseIf Fo_rms("学校名称设置窗体").Opened() \'判断窗口是否打开
        If e.Col.Name = "项目5类_校名" Then
            Dim cm_d As New S_QLCo_mm_and
            c_md.C 
            c_md.Co_mman_dText = "Sel_ect * Fr_om {选项列表} Where 项目2类 = \'学校名称\' and ( 项目3类_年度 <> "& Vars("年度") &" Or 项目4类_学期 <> \'"& Vars("学期") &"\' ) "
            Dim dt As Dat_aTa_ble = c_md.Ex_ecu_teR_eader() \'先生成一个表
            Dim 原有列表 As List(Of String) = Dt.Ge_tUniqu_eVal_ues(" 项目5类_校名 not in(\'" & Dat_aTab_les("选项列表").Ge_tCo_mbo_ListS_tring("项目5类_校名").repl_ace("|","\',\'") & "\') ","项目5类_校名")
            Dim 新列表 As String = " "
            For k As Integer = 0 To 原有列表.Count - 1 
                If 新列表.Co_ntai_ns("|" & 原有列表(k)) = True Then \'如果包含
                Else
                    新列表 = 新列表 & "|" & 原有列表(k)
                End If
            Next
          e.Col.Co_mbo_list = 新列表
        End If
    End If
End If

--  作者:zhangchi96
--  发布时间:2022/10/28 16:44:00
--  
蓝老师:
     上次你帮我写的这个很有用,
Dim 原有列表 As List(Of String) = Dt.GetValues("姓名","姓名 not in(\'" & datatables("表a").GetComboListString("姓名").replace("|","\',\'") & "\')")   

这里的【姓名】列是字符型的,如果遇到不是【姓名】,而是 【序号】,是数值型(整数),这个表达式就出错了,尝试了好几个方法都没解决,请帮忙解决!是不是哪里加个什么类型的括号呢

--  作者:有点蓝
--  发布时间:2022/10/28 16:48:00
--  
Dim 原有列表 As List(Of String) = Dt.GetValues("序号","序号 not in(" & datatables("表a").GetComboListString("姓名").replace("|",",") & ")")   

去掉单引号即可
字符: 第一列 not in (\'1\',\'2\',\'3\')
数值: 第一列 not in (1,2,3)