|
2008/05/18(Sun) 11:23:37 編集(投稿者)
■No18884 (ぽぴ王子 さん) に返信
お世話になります。
> 元のソースが開示されていないのでなにをどーすればいいかはさっぱりわかりませんが。
後ほどソースを記載しますがまずは概要を説明させていただきますと、
@Accessでテーブル(T1)を作成(フィールドは数値型(F1)とテキスト型(F2)の2つ) AVB.net2003でリストボックスを作成 BAで作成したリストボックスと@のテーブルを連結 CリストボックスのValueMemberプロパティにF1をDisplayMemberプロパティにF2を設定
という状況下において、プログラムを実行するとリストボックスには当然DisplayMemberに指定した F2の内容が表示されます。そこで選択中のアイテムの値をとりあえずmsgboxで表示させたいのですがListbox.SelectedValueは正しく取得できるのに 対し、Listbox.SelectedItemのほうは前述したようなエラーになってしまったというわけです。 調べてみると、SelectedItemのデータ型がDataRowView型として認識していたため、String型に変換する際にエラーになってしまうことに気がつきました。 そこでDataRowView型のSelectedItemを無理やりString型に変換しようと思い、Cstr(Listbox.SelectedItem)としてみましたがうまくいかなかったため MsgBox(CType(CType(Me.ListBox1.SelectedItem, DataRowView).Item(1), String))として値を取得したわけです。 しかし、同じAccessのデータなのにSelectedValueだけ問題なく取得できるのがどうにも納得できず、何か根本的なところが理解できていない可能性があったため 再度質問させていただきました。
> > …というか、ListBox1.SelectedItem が DataRowView になっていて、そこから Item(1) を取り出すのは > 何かが違うような気がします。
私も何かが違うような気はするのですが・・・その「何か」が分かりません。
<ソース>
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.OleDbDataAdapter1.Fill(DsTest1.T1) MsgBox(Me.ListBox1.SelectedValue) MsgBox(Me.ListBox1.SelectedItem) '←ここで失敗 MsgBox(CType(Me.ListBox1.SelectedItem, DataRowView).Item(1).ToString()) '←これならうまくいく End Sub
※ご参考までに・・・ リストボックスのDataSourceプロパティ:DsTest1.T1 リストボックスのDisplayMember:F2 リストボックスのValueMember:F1 OleDbDataAdapterのSelectコマンド:SELECT F1, F2 FROM T1 おそらくデータベースとの連結自体に問題はないと思います。
|