DataSourceとしてデータテーブルを使用してコンボボックスから整数値を取得する方法

StackOverflow https://stackoverflow.com/questions/3106335

質問

これに類似したコードを使用して、コンボボックスにデータベースのアイテムを入力しています。ディスプレイは正常に機能しますが、私が取得しようとするとき 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
役に立ちましたか?

解決

両方のフィールドを選択する必要があります IDText SQLで。

選択した場合 ID, 、使用できます MsgBox TypeName(cboPosition.SelectedValue) 選択した値のタイプを決定します。これはデバッグに役立つかもしれません。


編集:if 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: : 君 プロパティを「正しい」順序で設定する必要があります, 、つまり:

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

(初め DisplayMemberValueMember, それから DataSource.)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top