Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Combobox [Vb.Net]


Автор: FallFan 13.11.2012, 15:47
Доброго времени суток!

Имеется Combobox , который заполнен объектами ItemData:

Код

    Public Structure ItemData

        Public Text As String
        Public ID As String

        Public Sub New(ByVal _Text As String, ByVal _ID As String)
            Text = _Text
            ID = _ID
        End Sub

        Public Overrides Function ToString() As String
            Return Text
        End Function

    End Structure


Добавление производится из БД, вводятся данные о имени клиента и его ID  в БД. 

Пример:
Код

Combobox.Items.Add(New ItemData("Иванов","1"))


При записывании измененного значения Combobox в БД проблем не возникает: ItemData.ID в ID клиента, ItemData.Text в Имя клиента. 

Допустим весь список заполнен текстом " Иванов", но у каждого из них свой ID

Вопрос: Как выставить значение Combobox по требуемому значению ItemData.ID ? Не могу понять, как правильно в данном случае задействовать ValueMember.

Спасибо!

Автор: diadiavova 13.11.2012, 16:03
Используй свойство DisplayMember. Правда с полями оно вроде не работает, так что в своей структуре замени поля свойствами, да и вообще, публичные поля - зло.

Автор: FallFan 13.11.2012, 17:04
Создал небольшой пример для разбора.
Изменил ItemData.
В Button2_Click_1 написал код (один из вариантов), который, по моему мнению, должен работать. 
Однако получить SelectedIndex для строки с ItemData2.ID = "3" я не могу. 
Т.е. как мне "выставить" строку в combobox по условию Combobox.SelectedItem.ID = "3" ?

Код

Option Explicit On

Public Structure ItemData2

    Property ID As String
    Property Text As String

    Public Sub New(ByVal _Text As String, ByVal _ID As String)
        Text = _Text
        ID = _ID
    End Sub

    Public Overrides Function ToString() As String
        Return Text
    End Function

End Structure

Public Class frmTest

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'Кнопка заполнения списка
        Dim t As ItemData2
        Dim count As Integer

        cmbTest.Items.Clear()
        For count = 0 To 5
            t = New ItemData2("DisplayText_№" & CStr(count), CStr(count))
            cmbTest.Items.Add(t)
        Next

    End Sub

    Private Sub cmbTest_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbTest.SelectedIndexChanged
        'Вывод информации об элементе
        MsgBox("ID:" & Me.cmbTest.SelectedItem.ID & vbNewLine & _
               "Text:" & Me.cmbTest.SelectedItem.Text & vbNewLine & _
               "Stext:" & Me.cmbTest.SelectedText & vbNewLine & _
               "Svalue:" & Me.cmbTest.SelectedValue)

    End Sub

    Private Sub Button2_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        cmbTest.DisplayMember = "Text"
        cmbTest.ValueMember = "ID"
        cmbTest.SelectedValue = "3"
        MsgBox(cmbTest.SelectedIndex)
    End Sub
End Class

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)