【问题标题】:How to get an Integer Value from a ComboBox using a DataTable as its DataSource如何使用 DataTable 作为其 DataSource 从 ComboBox 获取整数值
【发布时间】:2010-06-23 23:39:02
【问题描述】:

我正在使用与此类似的代码来使用数据库中的项目填充组合框。显示工作正常,但是当我尝试获取 combobox.SelectedValue 时,它返回一个 DataRowView,我需要一个整数。显然这是因为我没有将值转换为整数,但是函数CInt(cboPosition.SelectedValue) 正在抛出 InvalidCastException。有什么方法可以让 ValueMember 的类型成为 Integer?

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

【问题讨论】:

    标签: vb.net casting datatable valuemember


    【解决方案1】:

    您需要在 SQL 中选择两个字段 IDText

    如果您确实选择了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的原因:你have to set the properties in the "right" order,即:

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

    (首先是DisplayMemberValueMember然后 DataSource。)

    【讨论】:

    • 如我所说,上面的代码只是类似而已。我使用的存储过程确实返回 ID 和 Description 字段;那部分工作正常。问题是 SelectedValue 的类型是 DataRowView
    • 我编辑了答案以显示我正在使用的查找的实际代码。
    • 只是为了确保:您正在使用SelectedValue 而不是SelectedItem,对吗?我已经更新了我的答案。
    • 用(我相信的)最终解决方案更新了我的答案。
    • 优秀。那解决了它。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 2013-06-30
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    相关资源
    最近更新 更多