Заполните ComboBox с помощью DataSet - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь использовать DataSet, заполненный из базы данных SQL, в котором есть только один столбец с уникальными именами, чтобы заполнить поля со списком.

Сейчас я использую этот код:

ClassTables.FillDistrib()
ComboBox.DataSource = ClassTables.Distrib.Tables("Names")

ClassTables - это класс, используемый для заполнения моих наборов данных.
Distrib - это имя моего DataSet (FillDistrib - это Sub, которое используется для очистки и заполнения)
ComboBox это имя моего ComboBox

Но выпадающий список ComboBox оставлен пустым.
Однако при использовании в DataGridView создается впечатление, что набор данных заполнен правильно.

1 Ответ

0 голосов
/ 17 января 2019

При назначении сложного объекта как 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...