Привязка сетки данных к источнику данных с помощью комбинированного списка - PullRequest
0 голосов
/ 06 апреля 2020

Я прочитал их, прежде чем спросить:

VB: Как связать DataTable с DataGridView?

http://msdn.microsoft.com/en-us/library/fbk67b6z (v = vs.100 ) .aspx

У меня очень простая проблема. Проект vb. net winforms содержит несколько таблиц данных, комбинированный список и представление данных.

Я могу выбрать таблицу данных для отображения таким образом:

datagridview1.datasource = dt1 'or dt2 or dt3

, и это работает отлично.

Что я хочу сделать, это выбрать отображаемый объект из списка выпадающих списков, где я ранее определил набор элементов списка, таким образом:

combobox1.item.add("dt1")
combobox1.item.add("dt2")
combobox1.item.add("dt3")

Я поместил эту строку

datagridview.datasource = combobox1.SelectedItem

в событии ComboBox1_SelectedIndexChanged.

Это просто закрывает мое представление данных. Сначала я думал, что это не удастся, потому что я передаю строку чему-то, что ожидает объект, поэтому я попытался datagridview.datasource = CObj(combobox1.SelectedItem), но без лучшего результата.

Какую простую вещь я делаю неправильно?

Ответы [ 3 ]

1 голос
/ 06 апреля 2020

Добавьте ссылки на объекты DataTable непосредственно в коллекцию ComboBox.Items.

combobox1.DisplayMember = "TableName"
combobox1.DataSource = {dt1, dt2, dt3}
' Or... (DisplayMember value applies anyway)
'combobox1.Items.AddRange({dt1, dt2, dt3})

В обработчике событий ComboBox SelectionChangeCommitted установите DataGridView.DataSource:

Private Sub combobox1_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles combobox1.SelectionChangeCommitted
    dataGridView1.DataSource = DirectCast(combobox1.SelectedItem, DataTable)
End Sub

Если вы хотите использовать вместо этого событие SelectedIndexChanged, проверьте SelectedIndex < 0 и просто Return, если это так.

0 голосов
/ 06 апреля 2020

Я обычно кодирую в c#, но этот обходной метод будет работать:

    If combobox1.SelectedItem = "dt1" Then
        datagridview1.DataSource = dt1
    ElseIf combobox1.SelectedItem = "dt2" Then
        datagridview1.DataSource = dt2
    ElseIf combobox1.SelectedItem = "dt3" Then
        datagridview1.DataSource = dt3
    End If
0 голосов
/ 06 апреля 2020

Ваш ComboBox - это просто список строк, поэтому, когда вы делаете datagridview.datasource = combobox1.SelectedItem, вы на самом деле не устанавливаете источник данных как источник данных.

Что бы я сделал это в вашем ComboBox1_SelectedIndexChanged событие:

Select Case combobox1.SelectedItem
    Case "dt1"
        datagridview1.datasource = dt1
    Case "dt2"
        datagridview1.datasource = dt2
    Case "dt3"
        datagridview1.datasource = dt3
End Select
...