2017-06-13 75 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