以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]如何提取未使用的值(已解决)?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=130698)

--  作者:lunengcheng
--  发布时间:2019/1/29 13:59:00
--  [求助]如何提取未使用的值(已解决)?
各位老师前辈,现在有一个这样问问题,向大家请教一下,我设置了一个字典表字段,比如字段名称叫“

绑定到分组”,然后这个字段一共设置了10个值,分别是:

语音分组01
语音分组02
语音分组03
语音分组04
语音分组05
语音分组06
语音分组07
语音分组08
语音分组09
语音分组10


然后通过下面的代码,调用带窗口的ComboBox中;

Dim cmd As New SQLCommand
Dim r As Row =Foxtools.Tools.Rows(eform)
cmd.C
cmd.CommandText = "S-E-L-E-C-T * From {ZD_一级字典} Where 字典名称= \'绑定到分组\'"
Dim dt As DataTable = cmd.ExecuteReader(False)
eform.controls(sender.name).ComboList=dt.GetComboListString("字典值")


上面的代码可以正常调用出来,可以在ComboBox中看到上面的10个值供用户选择,现在我系统实现的效果

是,如果当前table找中的“绑定到分组”字段已经有使用过的值,则不显示出来,以达到每个值只能使

用一次的目的;


比如当前窗口的table中已经使用了“语音分组05”和“语音分组08”,那么当用户选择ComboBox时,则

不显示着两个词,只能选择剩下没有使用的值;

希望各位老师前辈可以指点一下,多谢了!
[此贴子已经被作者于2019/2/12 17:34:29编辑过]

--  作者:有点甜
--  发布时间:2019/1/29 14:55:00
--  

 

Dim dt As DataTable
Dim ls As List(Of String) = dt.getvalues("字典值")
For Each r As Row In Tables("表A").Rows
    If ls.Contains(r("第一列")) Then
        ls.Remove(r("第一列"))
    End If
Next
eform.controls(sender.name).ComboList = String.Join("|", ls.ToArray)

 


--  作者:lunengcheng
--  发布时间:2019/1/29 16:05:00
--  
老师,代码如下,没做到排除,还是出来10个,table里面已经使用了两个分组!

Dim cmd As New SQLCommand
Dim r As Row =Foxtools.Tools.Rows(eform)
cmd.C
cmd.CommandText = "S-E-L-E-C-T * From {ZD_一级字典} Where 上级字典= \'语音话术\' and 字典名称= \'绑定到分组\'"
Dim dt As DataTable = cmd.ExecuteReader(False)

\'eform.controls(sender.name).ComboList=dt.GetComboListString("字典值")
\'Dim dt As DataTable

Dim ls As List(Of String) = dt.getvalues("字典值")
For Each r1 As Row In Tables(eform.name.replace("二级","") & "_Table1").Rows
    If ls.Contains(r1("绑定到分组")) Then
        ls.Remove(r1("绑定到分组"))
    End If
Next

eform.controls(sender.name).ComboList = String.Join("|", ls.ToArray)

--  作者:有点蓝
--  发布时间:2019/1/29 19:56:00
--  
代码没有问题,如果有也是数据的问题。上传具体实例说明
--  作者:lunengcheng
--  发布时间:2019/2/10 11:33:00
--  
老师,下面的代码,确认ls可以输出内容,r1("绑定到分组")也可以输入内容,r1("绑定到分组")的内容包含在ls中,但是排除失败,使用MessageBox.show()代码测试,(0)可以出,(1)却不能弹出,应该是If ls.Contains(r1("绑定到分组")) Then 没有判断到重复值,不知道是哪段代码的问题?


----------------------------------------------------------------------------

Dim cmd As New SQLCommand
Dim r As Row =Foxtools.Tools.Rows(eform)
cmd.C
cmd.CommandText = "S-ELECT * From {ZD_一级字典} Where 上级字典= \'语音话术\' and 字典名称= \'绑定到分组\'"
Dim dt As DataTable = cmd.ExecuteReader(False)
\'eform.controls(sender.name).ComboList=dt.GetComboListString("字典值")

Dim ls As List(Of String) = dt.getvalues("字典值")
MessageBox.show(0)
For Each r1 As Row In Tables("语音话术_Table1").Rows
    If ls.Contains(r1("绑定到分组")) Then
        MessageBox.show(1)
        ls.Remove(r1("绑定到分组"))
    End If
Next
eform.controls(sender.name).ComboList = String.Join("|", ls.ToArray)

--  作者:lunengcheng
--  发布时间:2019/2/10 12:48:00
--  
老师,是不是 ls As List(Of String)这种数据类型,无法直接通过代码判断是否包含字符,然后移除,我直接判断指定的值,比如“语音话术分组1”,也是无法移除的,ls是包含“语音话术分组1”这一行字符的?

--  作者:有点甜
--  发布时间:2019/2/10 13:46:00
--  

1、msgbox(dt.GetComboListString("字典值")) 弹出值看看;

 

2、msgbox(r1("绑定到分组")) 弹出值看看;

 

3、具体实例发上来测试。


--  作者:lunengcheng
--  发布时间:2019/2/10 14:01:00
--  
老师,这个msgbox弹出是正确的,就是没法排除而已,会不会是我的代码是放在Enter里面的缘故?


图片点击可在新窗口打开查看此主题相关图片如下:ls.png
图片点击可在新窗口打开查看


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看


图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看




[此贴子已经被作者于2019/2/10 15:48:19编辑过]

--  作者:有点甜
--  发布时间:2019/2/10 16:03:00
--  
Dim dt As DataTable = cmd.ExecuteReader(False)
\'eform.controls(sender.name).ComboList=dt.GetComboListString("字典值")

 

msgbox(dt.GetComboListString("字典值"))


Dim ls As List(Of String) = dt.getvalues("字典值")
MessageBox.show(0)
For Each r1 As Row In Tables("语音话术_Table1").Rows
msgbox("aaa" & r1("绑定到分组") & "aaa")
    If ls.Contains(r1("绑定到分组")) Then
        MessageBox.show(1)
        ls.Remove(r1("绑定到分组"))
    End If
Next
eform.controls(sender.name).ComboList = String.Join("|", ls.ToArray)

--  作者:lunengcheng
--  发布时间:2019/2/10 16:53:00
--  
老师,加了 & "aaa" & 也是可以弹出的,不过还是检测不到重复?