Ищите здесь какое-то понимание ...
В моей форме у меня есть три элемента управления ComboBox. Когда самый левый получает выбор, он вызывает подпрограмму, чтобы включить и заполнить 2-й, затем то же самое происходит для 3-го, когда выбор сделан во 2-м.
Private Sub cboEquipment_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cboEquipment.SelectedIndexChanged
Me.transData.isMobile = If(Me.cboEquipment.Text = MOBIEQIP, 1, 0)
If cboMembership.Enabled = False Then
Me.cboMembership.Enabled = True
End If
Call loadGroups()
End Sub
Метод loadGroups
Private Sub loadGroups()
Dim cn As New SqlConnection(My.Settings.MyConnectionString)
Dim cm As New SqlCommand("SELECT ... ORDER BY codeHumanName ASC", cn)
Dim ta As New SqlDataAdapter(cm)
Dim dt As New DataTable
Me.cboMembership.DataSource = Nothing
Me.cboMembership.Items.Clear()
Me.transData.membership = Nothing
cn.Open()
ta.Fill(dt)
With Me.cboMembership
.DataSource = dt
.DisplayMember = "codeHumanName"
.ValueMember = "codeID"
End With
cn.Close()
End Sub
Это отлично работает, все загружается как надо и предоставляет соответствующие результаты .ValueMember.
Я должен упомянуть, что при первой загрузке формы поля 2 и 3 пусты и отключены. После их первоначальной загрузки мне нужно выбрать элемент из списка, чтобы получить значения (как и ожидалось).
Странная часть заключается в том, что после «инициализации» 2-го или 3-го поля со списком они, кажется, вспоминают последние настройки. Например, если я вызываю метод Reset, который устанавливает для свойства .DataSource значение Nothing, очищает список и устанавливает для Text значение Nothing; в следующий раз, когда я изменю SelectedIndex на cboEquipment, другие блоки оживут с SelectedItems и SelectedValues.
Эти значения не являются неправильными в соответствии с новой таблицей данных, но странно, что они вообще помнят (у них не должно быть никаких ссылок, и они ведут себя как новая загрузка).
Другие достопримечательности; методы заполнения вызываются во время события SelectedIndexChanged.
Любые мысли были бы замечательными!
ОБНОВИТЬ -
Это поведение связано с подпрыгиванием события SelectedIndexChange (поднять! поднять! поднять!)
Удаление и добавление обработчиков событий в стратегических точках заставляет мой код работать так, как я хочу/ожидаю.
Вот статья, которая направила меня на правильный путь...