Как получить целочисленное значение из 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
.)