- ベストアンサー
リストボックスの使い方で…
VB2005で開発をしております。 リストボックスに品目名を表示し、選択した品目名の品目コードをDBに登録したいと思っています。 ただ、品目名の裏で品目コードを保持しておく方法がわかりません。 なにか良い方法があれば教えていただきたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ListBoxでなくて表コントロールのDataGridViewを使うのはどうでしょ? 品目名と品目コードの2つの列を作って、品目コードの列プロパティのVisibleをFalseにしておけば、列としては存在し、値の保存はできますが表示はされません。 そこに品目コードを格納しておくのです。 初期デバッグ時は一時的にVisible=Trueにすれば品目名とコードがセットで格納できてるかも簡単に確認できます。 ListBox.Items.Addの代わりに、DataGirdView.Rows.Add(行数)を行ったあと、DataGirdView.Item(列番号, 行番号).Value=値…とします。 あとは、DataGridViewの以下のプロパティをいじって見た目はListBoxっぽい動きをさせればOKです。 RowHeadersVisible=False ScrollBars=Vertical SelectionMode=FullRowSelect (これで全部ではないかも?あとは自力で調べてください)
その他の回答 (3)
- K-Sogacchi
- ベストアンサー率53% (50/93)
ANo.3です。 …根本的な事を忘れていたかもしれません。 元々、品目情報をDBから取得しているのなら、ListBoxのDataSourceに DBの内容(DataTableとか?)を割り当て、DisplayMemberに 品目名のカラム、ValueMemberに品目コードのカラムを割り当てる方が 早いかもしれません。 (その手のやり方は、やった事無いけど…データバインド自体、ほとんど やった事無いので(汗))
- K-Sogacchi
- ベストアンサー率53% (50/93)
どうしてもListBoxで処理するなら、 品目名と品目コードを持った構造体のクラスを作成し、それを使用する 必要があります。 私も うろ覚えですが、少しだけ説明すると、 ・品目名と品目コードを持った構造体のクラスを作成 (ただの構造体じゃダメです) ・上記のクラスで、品目名を公開するプロパティと、品目コードを 公開するプロパティを作成 あとは…ToStringメソッドなんかも必要だったかな? ・構造体クラスにデータをセット ・ListBoxのDataSourceに、上の構造体クラスを設定 ・ListBoxのDiaplayMemberに、上の構造体クラスの品目名プロパティを割り当てる ・ListBoxのValueMemberに、上の構造体クラスの品目コードプロパティを割り当てる ・選択された品目のコードを参照する際は、ListBox.SelectedVaueプロパティを参照 …みたいな感じだったはず。 私がやろうとした時は、確かヘルプを探しまくったら どこかに載ってたはずなので (ListBoxのプロパティ関連だったか?)、分からなければ探してみて下さい。
- redfox63
- ベストアンサー率71% (1325/1856)
.NET Framework側だけでやろうとするなら配列やリストまたはクラスなどで品目名と品目コードを関連付けして別に持っている必要がありそうです VB6互換ライブラリを使うと SetItemData/GetItemDataでコードと品目名を関連付けできます 『Microsoft.VisualBasic.Compatibility』の参照の追加をしておいて Imports Microsoft.VisualBasic.Compatibility をフォームコードの先頭付近で宣言しておきます リストボックスのデータを登録する際に ListBox1.Items.Add(ss) VB6.SetItemData( ListBox1. ListBox1.Items.Count-1, nCode ) といった具合にします コードを取り出すには nCode = VB6.GetItemData( ListBox1, ListBox1.SelectedIndex ) といった具合にします