1

我正在使用与此类似的代码来使用数据库中的项目填充组合框。显示工作正常,但是当我尝试获取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
4

1 回答 1

2

您需要在 SQL 中选择这两个ID字段Text

如果您确实选择了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,但我不知道......


SelectedValueEDIT2:我找到了返回整行而不是仅返回的原因ValueMember:您必须以“正确”顺序设置属性,即:

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

(首先是 ,DisplayMember然后。)ValueMember DataSource

于 2010-06-23T23:50:41.427 回答