以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  动态设置列表项目  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=78929)

--  作者:文道古月
--  发布时间:2015/12/21 8:39:00
--  动态设置列表项目

老师好:

 

   如下代码,我想根据DropDownBox输入值的前四位,匹配所有包含这四位的行,将符合条件行的其它列,动态设为ComboBox的下拉列表项目

 

测试已经找到了行,但是为什么不执行设置列表项目呢?

 

Dim cmb As WinForm.ComboBox = e.form.Controls("类型代码ComboBox1") \'定义引用一个将发生变化的窗口中的控件cmb
Dim db1 As WinForm.DropDownBox = e.Sender \'定义引用正在发生变化的控件
Dim st As String = db1.Text.SubString(0,4) \'取得过账区域项目的值的前四位
Dim ls As New List(Of String) \'定义一个集合
For Each dr As DataRow In DataTables("移动类型").Select("")  \'大红袍:遍历移动类型表以集合形式返回的所有行
    Dim ary() As String = dr("主动单元").split("|") \'主动单元行的字符用|分割,并保存在数组ary中
    For Each s As String In ary \'遍历数组,保存数组的值到集合中==遍历的目的是为取得不重复的值
        If ls.Contains(s) = False Then \'判断集合不含s的值
            ls.add(s) \'将主动单元中所有用|符号分割的不重复字符,添加到集合中
        ElseIf ls.Contains(st) = True Then  \'假如当前控件st的输入内容,在集合中可以找到
            Dim dr2 As DataRow  \'\'那么,查找当前行,将内容设为列表项目
            dr2 = DataTables("移动类型").Find("[主动单元] like \'% & st & %\'")  \'包含st的行
            If dr2 IsNot Nothing Then \'假如找到行
                MessageBox.show(123)
                cmb.DisplayMember = dr2("类型代码") &  "|"  & dr2("代码文本")\'设置显示列
                cmb.ValueMember = dr2("类型代码") &  "|"  & dr2("代码文本") \'设置取值列
            ElseIf dr2 Is Nothing Then
                MessageBox.show(456)  
            End If
         ElseIf ls.Contains(st) = False Then          
            MessageBox.show("当前过账区域未授权移动!","提示",MessageBoxButtons.OK,MessageBoxIcon.Error)
        End If
    Next
Next


--  作者:大红袍
--  发布时间:2015/12/21 9:08:00
--  

参考,做不好,做例子上来

 

http://www.foxtable.com/help/topics/0926.htm

 


--  作者:文道古月
--  发布时间:2015/12/21 9:42:00
--  

老师帮忙看看,代码是已经找到了行的,但是却是空行,不知道为什么

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:d.table


--  作者:大红袍
--  发布时间:2015/12/21 9:58:00
--  

请做一个内部表的例子上。连不上你的数据库。

 

DisplayMember 这样的设置是不稳定的,建议直接设置 ComboList
--  作者:文道古月
--  发布时间:2015/12/21 10:20:00
--  

窗口2的Dropbox1控件,Valuehanged事件

 

不是设置,是已经找到了行,但是代码执行的是ElseIf dr2 Is Nothing Then,而不是If dr2 IsNot Nothing Then \'假如找到行

 

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.table


--  作者:大红袍
--  发布时间:2015/12/21 10:35:00
--  

直接写

 

Dim cmb As WinForm.ComboBox = e.form.Controls("类型代码ComboBox1") \'定义引用一个将发生变化的窗口中的控件cmb
Dim db1 As WinForm.DropDownBox = e.Sender \'定义引用正在发生变化的控件
Dim st As String = db1.Text.SubString(0,4) \'取得过账区域项目的值的前四位
Dim str As String = ""
For Each dr As DataRow In DataTables("移动类型").Select("\'|\' + [主动单元] + \'|\' like \'%|" & st & "|%\'")
    str += dr("类型代码") & "," & dr("代码文本") & "|"
Next
cmb.combolist = str.trim("|")


--  作者:文道古月
--  发布时间:2015/12/21 11:03:00
--  

老师好:

 

 

下面的代码,列名前后为什么要加|符号呢?Like匹配时为什么也要加|符号?

Select("\'|\' + [主动单元] + \'|\' like \'%|" & st & "|%\'")

 

这个+=符号是什么意思?

 str += dr("类型代码") & "/" & dr("代码文本") & "|"


--  作者:大红袍
--  发布时间:2015/12/21 11:27:00
--  

为了处理部分匹配的情况,比如 1234|456 ,如果匹配 123,也可以匹配上,但这不正确

 

+= 等同于 &= 等于 str = str & "xxxx"