При назначении сложного объекта как DataTable
свойству DataSource элементов управления ComboBox или ListBox укажите, используя свойство DisplayMember , которое Column
объекта DataTable следует использовать в качестве источника для отображения текста элементов ListControl.
Если выбранный элемент также должен возвращать значение, отличное от отображаемого текста, также задайте для свойства ValueMember имя столбца, который предоставляет связанные значения.
Возможно, перед установкой ссылки на источник данных элемента управления (чтобы избежать избыточных итераций базовых данных).
Давайте создадим DataTable
для проверки процедуры:
Назначьте DataTable
для DataSource
элемента управления ComboBox, указав в качестве DisplayMember
имя столбца, предоставляющего отображаемый текст, и в качестве ValueMember
имя столбца, предоставляющего дополнительные данные, которые будет возвращено свойством ComboBox.SelectedValue
, когда пользователь изменит SelectedItem
:
Dim dt As New DataTable("TestTable")
dt.Columns.AddRange({
New DataColumn("Names", GetType(String)),
New DataColumn("Values", GetType(Integer))
})
Dim row As DataRow = dt.NewRow()
row.ItemArray = New Object() {"Some Name", 1}
dt.Rows.Add(row)
row = dt.NewRow()
row.ItemArray = New Object() {"Some OtherName Jr.", 2}
dt.Rows.Add(row)
row = dt.NewRow()
row.ItemArray = New Object() {"Another Name", 3}
dt.Rows.Add(row)
row = dt.NewRow()
row.ItemArray = New Object() {"Last Name", 4}
dt.Rows.Add(row)
ComboBox1.DisplayMember = "Names"
ComboBox1.ValueMember = "Values"
ComboBox1.DataSource = dt.DefaultView
Private Sub ComboBox1_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles ComboBox1.SelectionChangeCommitted
Dim cbo = DirectCast(sender, ComboBox)
TextBox1.Text = cbo.GetItemText(cbo.SelectedValue)
End Sub
Результат:
![enter image description here](https://i.stack.imgur.com/kWRnB.gif)