Как получить целочисленное значение из ComboBox, используя DataTable в качестве источника данных

Я использую код, похожий на этот, чтобы заполнить комбинированный список с элементами из базы данных. Дисплей работает нормально, но когда я пытаюсь получить combobox.SelectedValue он возвращает DataRowView, где мне нужно целое число. Очевидно, это потому, что я не преобразовал значение в целое число, а в функцию, CInt(cboPosition.SelectedValue) выбрасывает InvalidCastException. Есть ли способ, которым я могу получить тип ValueMember как целое число?

Dim cn As New SqlConnection(CreditDisputesLogConn)
    Dim cmd As New SqlCommand("CustomersLookup", cn)
    Dim da As New SqlDataAdapter(cmd)
    cmd.CommandType = CommandType.StoredProcedure
    Try
        Dim dt As New DataTable
        da.Fill(dt)
        uxCustomerName.DataSource = dt
        uxCustomerName.DisplayMember = "CustomerName"
        uxCustomerName.ValueMember = "CustomerID"
        uxCustomerName.SelectedIndex = -1
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    Finally
        cn.Close()
        cn.Dispose()
    End Try

1 ответ

Решение

Вам нужно выбрать оба поля ID а также Text в вашем SQL.

Если вы выбрали ID, ты можешь использовать MsgBox TypeName(cboPosition.SelectedValue) определить тип выбранного значения. Это может помочь вам с отладкой.


РЕДАКТИРОВАТЬ: Если SelectedValue возвращает DataRowViewВы можете получить доступ к ID поле как это:

Dim myDataRowView As DataRowView = DirectCast(cboPosition.SelectedValue, DataRowView)
Dim myId as Integer = CInt(myDataRowView("CustomerID"))

Что касается почему SelectedValue возвращает DataRowView хотя правильный ValueMember установлено, я понятия не имею...


EDIT2: я нашел причину, почему SelectedValue возвращает всю строку, а не только ValueMember: Вы должны установить свойства в "правильном" порядке, то есть:

    uxCustomerName.DisplayMember = "CustomerName"
    uxCustomerName.ValueMember = "CustomerID"
    uxCustomerName.DataSource = dt

(Первый DisplayMember а также ValueMemberтогда DataSource.)

Другие вопросы по тегам