visual basic 2005についての質問です。

始めたばかりでうまくコミュニケーションが取れないかもしれませんが、ご了承ください。

windowsアプリのリストボックスにデータを入れようとしています。

データベースからid,nameの2つのデータを取得してリストボックスにはnameを表示して、リストボックスのnameがクリックされたら当該idを取得できるようにしたいです。

listbox.items.add(name)

nameはこのように設定できるのですが、idをどのように設定すればよいのか分かりません。

データソースというのを使うと簡単に出来るようなのですが、リストボックスに表示する内容が条件次第で変わるので今回のケースは、これを使うことは出来ないようです。

何かヒントを頂けると助かります。

回答の条件
  • 1人5回まで
  • 登録:2008/07/12 11:30:24
  • 終了:2008/07/12 13:42:42

ベストアンサー

id:freemann No.3

freemann回答回数315ベストアンサー獲得回数502008/07/12 13:02:29

ポイント80pt

VB.NETの構文はよくわからないですがC#使いから。

.NET Frameworkは同じなので論理は変わらないです。

DataSourceを使うと簡単です。

DBが何かわかりませんが、SQLServerならSqlDataAdapter、AccessならOleDbDataAdapter、OracleならOracleDataAdapterを使います。

adapterにはSELECT文を設定したSqlCommandなどを設定してください。

Dim adapter AS SqlDataAdapter

Dim dt AS DataTable

adapter.Fill(dt)

listbox.DataSource = dt

listbox.DisplayMember = "name" 'リストボックスに表示される値の指定

listbox.ValueMember = "id" 'リストボックスで選択されたものの値

これだけをコピーして使っても動きません。その辺はADO.NETの領域ですのでそのあたりを勉強されると今後にすごく役立つと思います。

もしよくわからないことがありましたら、その旨書いていただければ回答したいと思います。

id:southgate_01

ありがとうございます、バッチリできました。


データソースというのはコードの中で動的に作れるんですね。

本を見るとあらかじめ作っておかないといけないようでめんどくさいように見えたのですが、実に簡単に出来てとても助かりました。

2008/07/12 13:41:44

その他の回答(2件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/07/12 11:44:17

ポイント30pt

name を検索キーとして、SQL 文でマッチする id を検索します。


使用しているDB、接続方式、テーブル構造が分からないのですが、ADO で実装するのであれば、「VB ADO + SQL 応用編 (その三) ADO レコード参照」が参考になるでしょう。

id:southgate_01

申し訳ありません、説明がとてもまずかったようです。

データベースからのデータの取得は出来ていて、ユーザーコントロール?への設定のところでつまずいています。

id : 1

name : hogehoge

hogehogeのみをリストボックスに表示させておいて、クリックされるとid=1を取得することが出来ずに困っています。


HTMLのセレクトメニューのようにnameとid(value)を簡単に設定できるんじゃないかと思っているのですが。

2008/07/12 12:46:14
id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912008/07/12 12:08:33

ポイント30pt

データソースが全く使えないとは思えませんが、

http://www.atmarkit.co.jp/fdotnet/vblab/vsdbprog_01/vsdbprog_01_...


もともとの項目をデータベースから取っているのですから、選択されたデータをもとに

再度データベースから取得するといった方法ではできませんか。

リストのための条件が

SELECT name, id FROM table WHERE foo = 'bar';

であって選択された name が わかれば、

SELECT id FROM table WHERE foo = 'bar' AND name = "'" & listbox.items.item(listbox.SelectedIndex) & "'";

のような感じで取得できないでしょうか。


もしくは、name が一意ではない場合、name を add するのと同時に id を配列(例えば id_array)に格納しておき

(このときインデックスが一致するように注意)、

id_array(listbox.SelectedIndex);

で取得するようにするのも可能ではありますが、リスト作成時に処理が多少煩雑になります。

id:southgate_01

既に取得しているidのために再度SQLを発行するのはちょっと無駄なような気がします。

後者の方法をやってみようと思います。

2008/07/12 12:48:10
id:freemann No.3

freemann回答回数315ベストアンサー獲得回数502008/07/12 13:02:29ここでベストアンサー

ポイント80pt

VB.NETの構文はよくわからないですがC#使いから。

.NET Frameworkは同じなので論理は変わらないです。

DataSourceを使うと簡単です。

DBが何かわかりませんが、SQLServerならSqlDataAdapter、AccessならOleDbDataAdapter、OracleならOracleDataAdapterを使います。

adapterにはSELECT文を設定したSqlCommandなどを設定してください。

Dim adapter AS SqlDataAdapter

Dim dt AS DataTable

adapter.Fill(dt)

listbox.DataSource = dt

listbox.DisplayMember = "name" 'リストボックスに表示される値の指定

listbox.ValueMember = "id" 'リストボックスで選択されたものの値

これだけをコピーして使っても動きません。その辺はADO.NETの領域ですのでそのあたりを勉強されると今後にすごく役立つと思います。

もしよくわからないことがありましたら、その旨書いていただければ回答したいと思います。

id:southgate_01

ありがとうございます、バッチリできました。


データソースというのはコードの中で動的に作れるんですね。

本を見るとあらかじめ作っておかないといけないようでめんどくさいように見えたのですが、実に簡単に出来てとても助かりました。

2008/07/12 13:41:44
  • id:southgate_01
    southgate_01 2008/07/12 11:34:55
    すいません、追記です。

    idのみでなく、他にも複数の変数を設定できる方法があればさらに好都合です。
  • id:southgate_01
    southgate_01 2008/07/12 13:49:57
    コメントありがとうございます、参考になりました
    おっしゃるとおり、そのやり方ですべてのフィールドからデータが取れるようです。


この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません