выпадающий список, вызывающий предыдущий источник данных

Ищите здесь какое-то понимание ...

В моей форме у меня есть три элемента управления 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 (поднять! поднять! поднять!)

Удаление и добавление обработчиков событий в стратегических точках заставляет мой код работать так, как я хочу/ожидаю.

Вот статья, которая направила меня на правильный путь...


person zax0978    schedule 07.02.2013    source источник


Ответы (2)


Во втором и третьем полях со списком попробуйте очистить свойства .Text/.SelectedText, прежде чем устанавливать .DataTable

Поле со списком, вероятно, просто слишком полезно и предполагает, что при установке .DataTable во второй раз вы хотите, чтобы выбранный элемент соответствовал вашему свойству .Text.

person Derek Tomes    schedule 07.02.2013
comment
Попробовал ваше предложение, но проблема все еще существует. Странный - person zax0978; 07.02.2013

В итоге я использовал AddHandler и RemoveHandler, чтобы предотвратить цепочку событий, когда поля со списком заполнялись.

person zax0978    schedule 25.02.2013