如何在组合框中迭代显示值

时间:2017-06-13 15:21:07

标签: vb.net combobox

我有一个组合框,其值(显示值)被格式化(来自数据库查询):

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

1 个答案:

答案 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