我有一个组合框,其值(显示值)被格式化(来自数据库查询):
John Doe(11111)
其中11111是userID。 UserID是其计算机的登录名,我希望将所选值默认为登录UserID。
由于combobox.findstring(UserID)仅在条目以该字符串开头时匹配,我需要遍历这些值以在条目中查找UserID的子字符串。
我在这里搜索过,但解决方案似乎落在这个具体的例子周围。我似乎无法找到一个返回特定索引处显示值的方法。我错过了什么?
编辑: 这就是我填充组合框的方式:
Private Sub PopulateDropdown(strSQl As String, objControl As ComboBox, strTextField As String, strDataField As String)
Dim objdatareader As New DataTable
objdatareader = DataAccess.GetDataTable(strSQl)
objControl.DataSource = objdatareader
objControl.DisplayMember = strTextField
objControl.ValueMember = strDataField
End Sub
答案 0 :(得分:0)
这实际上可以帮助人们尝试找到组合框的ValueMember。
我正在从数据表中填充我的组合框,所以这个解决方案可能只对此有效。我不确定为什么会这样。我偶然发现了它。
首先,我开始做for each item in combobox.items
。根据intelisense,没有.value
,.text
,.DisplayMember
或与之相关的任何属性。我注意到combobox.items上的返回类型是DataRowView
。我不知道为什么会这样,但我跟着它去了。 DataRowView
的其中一位成员是Row
。事实证明,DataTable中的每一列都被添加到'item'的DataRowView中的Row
集合中。行(0)是第一列,行(2)是第二列,等等。然后,我可以在行全文中查找我的用户ID,然后使用组合框的FindExactString选择该行。以下代码有效(我在此示例中手动构建数据表):
dim UserID As String="12345"
dim MyTable as New Datatable
MyTable .Columns.Add("Value", Type.GetType("System.String"))
MyTable .Columns.Add("Text", Type.GetType("System.String"))
MyTable.rows.add("1","Bob Smith (11223)"
MyTable.rows.add("2","George Brown (12345)"
cboAssignedID.datasource=MyTable
cboAssignedID.DisplayMember="Text"
cboAssignedID.ValueMember="Value"
For Each item In cboAssignedID.Items
If InStr(item.Row(1).ToString, UserID) > 0 Then
cboAssignedID.SelectedIndex = cboAssignedID.FindStringExact(item.Row(1).ToString)
End If
Next