DataSourceとしてデータテーブルを使用してコンボボックスから整数値を取得する方法
-
29-09-2019 - |
質問
これに類似したコードを使用して、コンボボックスにデータベースのアイテムを入力しています。ディスプレイは正常に機能しますが、私が取得しようとするとき 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
解決
両方のフィールドを選択する必要があります ID
と Text
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
(初め DisplayMember
と ValueMember
, それから DataSource
.)
所属していません StackOverflow