Как сгенерировать и заполнить источник данных по коду? - PullRequest
1 голос
/ 18 марта 2020

Я создал источник данных combobox.dat с кодом

salmon.DataSource = {New With {.Text = CDate("1.4.20").ToString("MMM"), Key .Value = "1"},
                     New With {.Text = CDate("1.5.20").ToString("MMM"), Key .Value = "2"},
                     New With {.Text = CDate("1.6.20").ToString("MMM"), Key .Value = "3"},
                     New With {.Text = CDate("1.7.20").ToString("MMM"), Key .Value = "4"},
                     New With {.Text = CDate("1.8.20").ToString("MMM"), Key .Value = "5"},
                     New With {.Text = CDate("1.9.20").ToString("MMM"), Key .Value = "6"},
                     New With {.Text = CDate("1.10.20").ToString("MMM"), Key .Value = "7"},
                     New With {.Text = CDate("1.11.20").ToString("MMM"), Key .Value = "8"},
                     New With {.Text = CDate("1.12.20").ToString("MMM"), Key .Value = "9"},
                     New With {.Text = CDate("1.1.20").ToString("MMM"), Key .Value = "10"},
                     New With {.Text = CDate("1.2.20").ToString("MMM"), Key .Value = "11"},
                     New With {.Text = CDate("1.3.20").ToString("MMM"), Key .Value = "12"}}

Как мне заполнить этот источник данных, запрограммировав al oop, как для i = 1 до 12 ??? Следующий

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Как предполагает @LarsTech, вам может понадобиться что-то вроде этого:

For i As Integer = 1 To 12
    ComboBox1.Items.Add(New KeyValuePair(Of String, String)(CDate("1." & i.ToString & "." & Now.Year.ToString).ToString("MMM"), i.ToString))
Next

ComboBox1.DisplayMember = "Key"
ComboBox1.ValueMember = "Value"
AddHandler ComboBox1.SelectedValueChanged, Sub()
                                               MsgBox("Key:" & CType(ComboBox1.SelectedItem, KeyValuePair(Of String, String)).Key & vbNewLine &
                                                      "Value:" & CType(ComboBox1.SelectedItem, KeyValuePair(Of String, String)).Value)
                                           End Sub
0 голосов
/ 18 марта 2020

Давайте создадим таблицу данных с именами и типами пользовательских столбцов, заполните ее данными и назначим для отображения в комбинированном списке. :

Dim dt as New Datatable
dt.Columns.Add("DisplayCol")
dt.Columns.Add("ValueCol", GetType(Integer))

Dim d as New DateTime(1999, 12, 1)
For int i = 1 to 12
  dt.Rows.Add(d.AddMonths(i).ToString("MMM"), i)
Next i

combo.DataSource = dt
combo.DisplayMember = "DisplayCol" 'tell the combo what column name to use for display text
combo.ValueMember = "ValueCol" 'tell the combo what column to use for value

Я специально сделал значение col int, чтобы продемонстрировать, как это можно сделать. Если вам нужна строка, удалите GetType в конструкторе столбца, а также вызовите i.ToString ()

. Комбо фактически связывается с DefaultView таблицы, поэтому мы можем использовать это для сортировки и фильтрации. что показывает в комбо:

'if dt is still in scope
dt.DefaultView.Sort = "[ValueCol] DESC"

'if we only can access the datatable via the datasource property of the combo
DirectCast(combo.DataSource, DataTable).DefaultView.Sort = "[ValueCol] DESC"
...