- PR -

複数列のComboboxについて

投稿者投稿内容
bacchus
会議室デビュー日: 2002/10/11
投稿数: 10
投稿日時: 2002-10-11 11:07
Comboboxにて、複数列データを持つ方法について
知っている方がいらっしゃいましたら、教えてください。
以前の、Columnに該当するものが知りたいのです。

例:従業員名をComboboxで選択し、同時にIDを取得。
  Comboboxには従業員名のみ表示。

よろしくお願いします。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2002-10-11 13:53
ComboboxのItemsに登録されるオブジェクトの型はObjectです。
フォーム上のコンボボックスのリスト(クリックしたときにビロッと開くあれ)に表示されるのは、登録されているオブジェクトのToString()の返り値です。
ですので、例えば

public class CElement
{
  public string strShow,strHide;

  public override string ToString()
  {
    return strShow;
  }
}

このようなクラスのインスタンスを作ってコンボボックスに登録すれば、表示されている値(strShow)の他にもう一つ値(strHide)を保持できます。

今さっきちょっと実験しただけなので、本当にこのような動作をしているのかどうかは分かりませんが、一度お試しあれ。

[ メッセージ編集済み 編集者: 一郎 編集日時 2002-10-11 14:01 ]
DaikiRyuto
大ベテラン
会議室デビュー日: 2002/07/23
投稿数: 200
投稿日時: 2002-10-11 13:59
引用:

例:従業員名をComboboxで選択し、同時にIDを取得。
  Comboboxには従業員名のみ表示。



単純にIDと名を取りたいだけですか?
でしたら、
http://www.daikiryuto.com/program/dotnet/asp01.htm
な方法ではどうでしょう?

#読み違えてますか?
bacchus
会議室デビュー日: 2002/10/11
投稿数: 10
投稿日時: 2002-10-11 14:56
一郎さん、DaikiRyutoさんありがとうございます。

VB.NETで実現するには、どのようにすればよいのでしょうか?
一郎さんのアイデアをなんとかVBに置き換えようと四苦八苦したのですが、
うまくいかなかったもので・・・。

[ メッセージ編集済み 編集者: bacchus 編集日時 2002-10-11 14:57 ]
まゆりん
ぬし
会議室デビュー日: 2002/08/12
投稿数: 539
お住まい・勤務地: よこはま
投稿日時: 2002-10-11 16:16
VBでWebアプリを開発しているまゆりんです。

>例:従業員名をComboboxで選択し、同時にIDを取得。
>  Comboboxには従業員名のみ表示。

Comboboxってツールボックスの「DropDownList」でいいんですよね?
それなら、DBから取得した従業員名とIDを
ListBox1.Items.Add(New ListItem(従業員名, ID))
で可能だと思いますが?

こんな風に。
While objDataReader.Read()
    vName = CStr(objDataReader("jyugyoin"))
    vId = CStr(objDataReader("id"))
    lstDenpyoShubetsu.Items.Add(New ListItem(vName, vId))
End While

これはHTMLの
<select name="ListBox1" id="ListBox1">
    <option value="ID">従業員名</option>
</select>
にあたります。

で、取得する際はこのようにすれば一緒に取得することが可能です。
・従業員を取得
 ListBox1.SelectedItem.Text
・IDを取得
 ListBox1.SelectedItem.Value

ただし、要素が3つ以上の場合は分かりませんのでアシカラズ・・・。


[ メッセージ編集済み 編集者: まゆりん 編集日時 2002-10-11 16:34 ]
bacchus
会議室デビュー日: 2002/10/11
投稿数: 10
投稿日時: 2002-10-11 16:55
まゆりんさんありがとうございます。

折角教えていただいたのですが、
「編集も可能」にしたいので、どうしてもcomboboxで行いたいのです・・・。

listboxの場合、うまくいくのですが・・・
まゆりん
ぬし
会議室デビュー日: 2002/08/12
投稿数: 539
お住まい・勤務地: よこはま
投稿日時: 2002-10-11 17:30
Windowsフォームのお話だったんですね。>ヘルプ見ました
どうりで自分の開発中アプリのツールボックスに無いはずです。
(私はWebフォームしか使ったことがないので・・・)
大変失礼致しました。先ほどのは見なかったことにしておいてください(笑)。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2002-10-11 19:09
う〜む、そうか。実際仕事で使っているような方は、.NETと言えば真っ先にWebサービスを思い浮かべるんですかね。
私は仕事じゃ使ってないからな…ウィンドウズフォームしか頭に浮かんできませんでした。
しかも「VB.NETで」って言われるまで、C#という特定の言語で説明していたということも、頭の片隅にすら思い浮かびませんでした。
世界が狭いな、私。

で、VB.NETか…。会社にならあるんですけど、もう帰ってきちゃったからな…。VB6ならちょっと使ったことはあるんですが、適当に書くわけにもいかないので、言葉で説明してみますね。C#も交えつつ。

まず必要なデータを格納できるフィールドを持ったクラスを定義します。C#だと
public class CElement
{
  public int ID;
  public string Name;

  public override string ToString()
  {
    return Name;
  }
}
こう。コンボボックスに表示したい文字列を返すToString()というメソッドも定義する。

使う場合は(コンボボックスのオブジェクト名をcmb1とすると)、まずコンボボックスのItemsプロパティのAdd()メソッドというので項目を追加して、(elm1,elm2,elm3はID等をすでに設定されているCElementオブジェクトとする)
  cmb1.Items.Add(elm1);
  cmb1.Items.Add(elm2);
  cmb1.Items.Add(elm3);
するとコンボボックスに項目が表示されるようになります。

次に選択されている項目の値を取り出す場合は、
コンボボックスのSelectedItemプロパティから取得できます。これはObject型ですのでキャスト(明示的型変換)して、
(CElement)cmb1.SelectedItem
これが選択されたオブジェクト。このIDを見たければ。
((CElement)cmb1.SelectedItem).ID
で良いと思います。


……だめか、どなたかVBで説明よろしくお願いします。

スキルアップ/キャリアアップ(JOB@IT)