始めたばかりでうまくコミュニケーションが取れないかもしれませんが、ご了承ください。
windowsアプリのリストボックスにデータを入れようとしています。
データベースからid,nameの2つのデータを取得してリストボックスにはnameを表示して、リストボックスのnameがクリックされたら当該idを取得できるようにしたいです。
listbox.items.add(name)
nameはこのように設定できるのですが、idをどのように設定すればよいのか分かりません。
データソースというのを使うと簡単に出来るようなのですが、リストボックスに表示する内容が条件次第で変わるので今回のケースは、これを使うことは出来ないようです。
何かヒントを頂けると助かります。
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の領域ですのでそのあたりを勉強されると今後にすごく役立つと思います。
もしよくわからないことがありましたら、その旨書いていただければ回答したいと思います。
name を検索キーとして、SQL 文でマッチする id を検索します。
使用しているDB、接続方式、テーブル構造が分からないのですが、ADO で実装するのであれば、「VB ADO + SQL 応用編 (その三) ADO レコード参照」が参考になるでしょう。
申し訳ありません、説明がとてもまずかったようです。
データベースからのデータの取得は出来ていて、ユーザーコントロール?への設定のところでつまずいています。
id : 1
name : hogehoge
hogehogeのみをリストボックスに表示させておいて、クリックされるとid=1を取得することが出来ずに困っています。
HTMLのセレクトメニューのようにnameとid(value)を簡単に設定できるんじゃないかと思っているのですが。
データソースが全く使えないとは思えませんが、
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のために再度SQLを発行するのはちょっと無駄なような気がします。
後者の方法をやってみようと思います。
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の領域ですのでそのあたりを勉強されると今後にすごく役立つと思います。
もしよくわからないことがありましたら、その旨書いていただければ回答したいと思います。
ありがとうございます、バッチリできました。
データソースというのはコードの中で動的に作れるんですね。
本を見るとあらかじめ作っておかないといけないようでめんどくさいように見えたのですが、実に簡単に出来てとても助かりました。
ありがとうございます、バッチリできました。
データソースというのはコードの中で動的に作れるんですね。
本を見るとあらかじめ作っておかないといけないようでめんどくさいように見えたのですが、実に簡単に出来てとても助かりました。