如何使用DataTable作为数据源从ComboBox获取整数值
-
29-09-2019 - |
题
我正在使用类似的代码来填充数据库中的项目。显示屏正常,但是当我尝试获得 combobox.SelectedValue
它正在返回DataRowView,我需要一个整数。显然这是因为我没有将价值投入整数,但是功能, CInt(cboPosition.SelectedValue)
正在抛出无效的castexception。有什么办法可以使估价人员的类型成为整数?
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
解决方案
您需要选择两个字段 ID
和 Text
在您的SQL中。
如果您确实选择了 ID
, , 您可以使用 MsgBox TypeName(cboPosition.SelectedValue)
确定所选值的类型。这可能会帮助您调试。
编辑:如果 SelectedValue
返回a DataRowView
, ,您可以访问 ID
这样的字段:
Dim myDataRowView As DataRowView = DirectCast(cboPosition.SelectedValue, DataRowView)
Dim myId as Integer = CInt(myDataRowView("CustomerID"))
关于原因 SelectedValue
返回 DataRowView
虽然是正确的 ValueMember
设置了,我不知道...
edit2:我找到了原因 SelectedValue
返回整个行,而不仅仅是 ValueMember
: : 你 必须在“正确”订单中设置属性, , IE:
uxCustomerName.DisplayMember = "CustomerName"
uxCustomerName.ValueMember = "CustomerID"
uxCustomerName.DataSource = dt
(第一的 DisplayMember
和 ValueMember
, 然后 DataSource
.)
不隶属于 StackOverflow