Foxtable(狐表)用户栏目专家坐堂 → 动态设置列表项目


  共有2512人关注过本帖树形打印复制链接

主题:动态设置列表项目

帅哥哟,离线,有人找我吗?
文道古月
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:303 积分:2363 威望:0 精华:0 注册:2015/10/14 16:55:00
动态设置列表项目  发帖心情 Post By: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


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/21 9:08:00 [只看该作者]

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

 

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

 


 回到顶部
帅哥哟,离线,有人找我吗?
文道古月
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:303 积分:2363 威望:0 精华:0 注册:2015/10/14 16:55:00
  发帖心情 Post By:2015/12/21 9:42:00 [只看该作者]

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

 

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/21 9:58:00 [只看该作者]

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

 

DisplayMember 这样的设置是不稳定的,建议直接设置 ComboList

 回到顶部
帅哥哟,离线,有人找我吗?
文道古月
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:303 积分:2363 威望:0 精华:0 注册:2015/10/14 16:55:00
  发帖心情 Post By:2015/12/21 10:20:00 [只看该作者]

窗口2的Dropbox1控件,Valuehanged事件

 

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

 

 

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By: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("|")


 回到顶部
帅哥哟,离线,有人找我吗?
文道古月
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:303 积分:2363 威望:0 精华:0 注册:2015/10/14 16:55:00
  发帖心情 Post By:2015/12/21 11:03:00 [只看该作者]

老师好:

 

 

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

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

 

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

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


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/21 11:27:00 [只看该作者]

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

 

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


 回到顶部