DOBON.NET DOBON.NETプログラミング掲示板過去ログ

キャストについて教えてください

環境/言語:[X]
分類:[.NET]

お世話になっております。
毎度、超初歩的な質問で申し訳ありません。

試みた事
コンボボックスから選択値を取得し、編集した後結果をテキストボックスに
表示しようとしました。
ところが選択値を取得しようとすると下記のエラーが出てしまいます。

「DataRowView' から型 'String' へのキャストが有効ではありません。」
のエラーが出て悩んでいます。
どなたか解決方法をご教授下さい。

Private Sub ComboBox1_SelectedIndexChangedSystem.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Dim mConTxt String
mConTxt = ComboBox1.SelectedValue ←ここでエラー
:
:
End Sub

でmConTxtを試しにバリアント型にしてみた。

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Dim mConTxt
mConTxt = ComboBox1.SelectedValue
me.Jken.Text = mConTxt ←試しに代入したらここで
    :
:
End Sub
2005/09/16(Fri) 19:20:00 編集(投稿者)

お世話になります。

■No12833に返信(鈴さんの記事)
ComboBoxにデータベースの値をバインドしているのだと思いますが…
その場合、Me.ComboBox1.SelectedValueでDataRowView型の値が返ってきます。
それを、DataRowView.Item(index)で値が取れるので、
↓こうなりますかねぇ…
CType(CType(Me.ComboBox1.SelectedValue, DataRowView).Item(0), String)

ただ、問題ないのなら、
ComboBox.Textなどでも同じ値がとれるかと思います。
なおこ(・∀・)さん有難うございます。

> CType(CType(Me.ComboBox1.SelectedValue, DataRowView).Item(0), String)

今までのエラーが消えて実行できる状態になったのですが、コンボボックスを
選択すると
「指定されたキャストは有効ではありません。 」
のエラーになってしまいました。
無い頭を絞って色々とやってみたのですが・・・・
おんぶに抱っこで申し訳ありませんが何かヒントをいただけたらありがたいのですが

> ただ、問題ないのなら、
> ComboBox.Textなどでも同じ値がとれるかと思います。
はい、最初はご指摘の方法で行っていたのですが、データベースの値を連結して
表示してしまったのでMe.ComboBox1.SelectedValueで値を取らざるを得ない状況
になってしまったのです。
お世話になります。

■No12847に返信(鈴さんの記事)
>>CType(CType(Me.ComboBox1.SelectedValue, DataRowView).Item(0), String)
>
> 今までのエラーが消えて実行できる状態になったのですが、コンボボックスを
> 選択すると
> 「指定されたキャストは有効ではありません。 」
> のエラーになってしまいました。
> 無い頭を絞って色々とやってみたのですが・・・・
> おんぶに抱っこで申し訳ありませんが何かヒントをいただけたらありがたいのですが

とりあえず、Try〜Catch構文をメソッド内に入れて、
Catchにブレークポイントを付けて、ステップ実行し、
例外の詳細を見ましょう。

# たぶん、Me.ComboBox1.SelectedValueがNothingとかなんじゃないかなぁ。

あと余談ですが、
■No12833に返信(鈴さんの記事)
>でmConTxtを試しにバリアント型にしてみた。
VB.NETにはVariant型は無いです。
厳密に言うと違いますが、Object型がそれにあたります。
なおこ(・∀・)さんお世話になっております。

ご指摘の方法で
>Catchにブレークポイントを付けて、ステップ実行し、
>例外の詳細を見ましょう。

行ったら「指定されたキャストは有効ではありません。」になりましたが
値が入っている事が判ったので

教えていただいた方法を分解し、試しに
Dim RowV As DataRowView = CType(Me.ComboBox1.SelectedItem, DataRowView)
mConTxt = RowV("報告者名称")
と直接項目名を指定して実行したらうまく行きました。

> VB.NETにはVariant型は無いです。
> 厳密に言うと違いますが、Object型がそれにあたります。

お恥ずかしい限りです。Variantが見つからないので何となくオカシイとは
思ったのですが、エラーにならなかったので勝手に思い込んでいました。

有難うございました。経験値またひとつアップしたようです。
これに懲りずにこれからもよろしくお願いいたします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板