dポイントプレゼントキャンペーン実施中!

VB2005で開発をしております。

リストボックスに品目名を表示し、選択した品目名の品目コードをDBに登録したいと思っています。
ただ、品目名の裏で品目コードを保持しておく方法がわかりません。

なにか良い方法があれば教えていただきたいです。

A 回答 (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  
(これで全部ではないかも?あとは自力で調べてください)
    • good
    • 0

ANo.3です。


…根本的な事を忘れていたかもしれません。
元々、品目情報をDBから取得しているのなら、ListBoxのDataSourceに
DBの内容(DataTableとか?)を割り当て、DisplayMemberに
品目名のカラム、ValueMemberに品目コードのカラムを割り当てる方が
早いかもしれません。
(その手のやり方は、やった事無いけど…データバインド自体、ほとんど
やった事無いので(汗))
    • good
    • 0

どうしてもListBoxで処理するなら、


品目名と品目コードを持った構造体のクラスを作成し、それを使用する
必要があります。
私も うろ覚えですが、少しだけ説明すると、
・品目名と品目コードを持った構造体のクラスを作成
 (ただの構造体じゃダメです)
・上記のクラスで、品目名を公開するプロパティと、品目コードを
 公開するプロパティを作成
 あとは…ToStringメソッドなんかも必要だったかな?
・構造体クラスにデータをセット
・ListBoxのDataSourceに、上の構造体クラスを設定
・ListBoxのDiaplayMemberに、上の構造体クラスの品目名プロパティを割り当てる
・ListBoxのValueMemberに、上の構造体クラスの品目コードプロパティを割り当てる
・選択された品目のコードを参照する際は、ListBox.SelectedVaueプロパティを参照
…みたいな感じだったはず。
私がやろうとした時は、確かヘルプを探しまくったら どこかに載ってたはずなので
(ListBoxのプロパティ関連だったか?)、分からなければ探してみて下さい。
    • good
    • 0

.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 )
といった具合にします
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!