2017-06-13 69 views
0

显示值有一个组合框,其值(displayvalue)的格式(从数据库中查询):我如何在迭代组合框

李四(11111)

,其中11111是用户ID。 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

检查这一点,他们显示的用户名和用户名显示+ ID:http://vb.net-informations.com/dataset/bind-combobox .htm – Mederic

+0

是否迭代通过[ComboBox.Items](https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.items(v = vs.110).aspx)属性提供你需要什么? –

+0

@Mederic这显示了一个填充组合框的例子,我把那个部分放下了。在我填充它之后,我想根据显示值的子字符串在列表中选择一个值@Christopher Kyle Horton我可以为combobox.items中的每个项目执行一个',但是我找不到什么方法然后会给我显示每个项目的文字。 .text和.value不是成员。我需要返回displayvalue,以便“instr()”它。 –

回答

0

这实际上可以帮助人们试图找到一个组合框的ValueMember为好。

我从数据表中填充我的组合框,所以此解决方案可能仅适用于此。我不太确定这是为什么。我只是偶然发现了它。

首先,我开始做一个for each item in combobox.items。根据intelisense,没有.value.text,.DisplayMember或与此相关的任何内容。我确实注意到combobox.items上的返回类型是DataRowView。我不知道这是为什么,但我随它去了。 DataRowView的成员之一是。事实证明,DataTable中的每一列都被添加到'item's'DataRowView中的集合中。行(0)是第一列,行(2)是第二行等。然后,我可以在行全文中查找我的用户标识,然后使用组合框的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