老师好:
如下代码,我想根据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