- PR -

複数の値をもたせたコンボボックスでコードより値を選択する方法

1
投稿者投稿内容
PoH
常連さん
会議室デビュー日: 2003/09/09
投稿数: 48
投稿日時: 2004-09-15 15:08
WINDOWSフォーム VB.NETで作成しています。(2003です)

コンボボックスに複数の値を持たせる際
データの追加、取得はできるのですが、
コンボボックスの値をコードより選択する方法がわかりません。

コード:
'---------------------------------------------------------------------
' コンボボックス設定
'---------------------------------------------------------------------
Private Sub コンボボックスセット()

    Dim Ds As MstDataset = New MstDataset
    Dim row As DataRow
    Dim i As Integer
    Dim NAME As String '名称
    Dim CD As Integer 'コード

    ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList

    'これはデータを取得しています
    pubController.getData("TEST_TABLE", Ds)

    For i = 0 To (Ds.Tables("TEST_TABLE").Rows.Count) - 1
        row = Ds.Tables("TEST_TABLE").Rows(i)
        '名称、コードを取得
        NAME = row("DISPLAY_NAME").ToString()
        CD = row("CD")
        'コンボボックスにADD
        ComboBox1.Items.Add(New MyList(NAME, CD))
    Next i

End Sub


ちなみにMyListはここを参考にクラスを作っています。
http://support.microsoft.com/default.aspx?scid=kb;ja;311340
コード:
Public Class MyList

    Private strName As String
    Private intID As Integer

    Public Sub New()
        strName = ""
        intID = 0
    End Sub

    Public Sub New(ByVal Name As String, ByVal ID As Integer)
        strName = Name
        intID = ID
    End Sub

    Public Property Name() As String
        Get
            Return strName
        End Get

        Set(ByVal sValue As String)
            strName = sValue
        End Set
    End Property

    Public Property ItemData() As Integer
        Get
            Return intID
        End Get

        Set(ByVal iValue As Integer)
            intID = iValue
        End Set
    End Property

    Public Overrides Function ToString() As String
        Return strName
    End Function

End Class


コンボボックスの値は
ComboBox1.SelectedItem.Name
ComboBox1.SelectedItem.ItemData
で取得できるのですが

コンボボックスの値を選択する時
コードを指定して選択したいのですが
ComboBox1.SelectedValue = "選択したいコード"
ComboBox1.SelectedItem.ItemData = "選択したいコード"

と、ほかにも数パターン適当に試してみたのですが
どうやって指定するかわかりません。

単純なことかもしれませんが
指定方法をご教授願いませんでしょうか
また設定の間違いがあればご指摘ください。
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-09-15 15:26
どうもです。すいません、コードはしんどくて全部見てませんが・・。

コンボボックスで選択したい値を設定するにはSelectedIndexプロパティを使用します。

Combobox1.SelectedIndex = 1

と言う風にです。

ComboBox1.Items.Add(New MyList(NAME, CD))
だとIndexが自動的に設定されますのでIndexを指定するときに分かりにくいと思います。

ComboBox1.Items.Insert(index, item)

と言う風にIndexを指定して項目を追加して選択時にSelectedIndexでIndexを指定します。

では。
PoH
常連さん
会議室デビュー日: 2003/09/09
投稿数: 48
投稿日時: 2004-09-15 16:01
とっと様早速の返答ありがとうございます。
すこし説明不足だったことをお詫びします。

引用:

'これはデータを取得しています
pubController.getData("TEST_TABLE", Ds)

For i = 0 To (Ds.Tables("TEST_TABLE").Rows.Count) - 1
row = Ds.Tables("TEST_TABLE").Rows(i)
'名称、コードを取得
NAME = row("DISPLAY_NAME").ToString()
CD = row("CD")
'コンボボックスにADD
ComboBox1.Items.Add(New MyList(NAME, CD))
Next i



説明がわかり難くてすいません。
SelectedIndexと、ここで入力するコードといっているものは
等しくないものとして考えていました。
コードが今回Integerになっていたので申し訳ないのですが
コードはString型でも考えてもらえるとわかりやすいかと思います。

つまり
ComboBox1.Items.Add(New MyList("AAA", "CD001"))
ComboBox1.Items.Add(New MyList("BBB", "CD002"))
ComboBox1.Items.Add(New MyList("CCC", "CD003"))
ComboBox1.Items.Add(New MyList("DDD", "CD004"))

とデータを入れておき
"CD004"を選択したい場合(この場合表示されるは"DDD"ということになります)
どのように指定すればいいのかという所です。

Combobox1.SelectedIndex = XXX
だと、とっとさんの仰るとおりIndexがわかっていません。
Combobox1.SelectedValue = "CD004"
でもだめなようです。

参考にしたURLでもこの作り方を行い、
コンボボックスのデータを取得する方法は記述されていたのですが
逆に選択するほうは書かれていませんでした。

選択方法、または別のコンボボックスの設定方法でも構いません
ご存知の方がおられましたら、よろしくお願いいたします。
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-09-15 16:13
[quote]
PoHさんの書き込み (2004-09-15 16:01) より:
とっと様早速の返答ありがとうございます。

[quote]

ドキュメント作成ばかりで気分転換もかねてです^^

例えば、Combobox1.text = XXXXX で指定するのはダメですか?

僕は予め値が設定されたコンボボックスのtextプロパティを設定してSelectedIndexChangedイベントを発生させたりしていますが・・・。
PoH
常連さん
会議室デビュー日: 2003/09/09
投稿数: 48
投稿日時: 2004-09-15 16:58
とっと様、何度もありがとうございます^^
引用:

例えば、Combobox1.text = XXXXX で指定するのはダメですか?


この場合
Combobox1.text = "DDD"
を行うと、期待通り"CD004"(コンボボックスの表示は"DDD")
を選択してくれています。

今回は"CD004"のコード(Value)のほうで指定したいので。
Combobox1.text = "CD004"
ではだめなようです。
Combobox1.Value = "CD004"
ってのはないみたいで^^;
どうもWEBフォームとごっちゃになっていけません。

たぶん単純なところでつまずいているのかともおもいつつ
解決策が見当たっておりません。

どなたか方法、ご指摘等ありましたら
ご指導おねがいいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-09-15 18:24
引用:

PoHさんの書き込み (2004-09-15 15:08) より:

コード:
Public Class MyList
(中略)
End Class




このクラスのインスタンスをArrayListに格納して、ComboBox.DataSourceに設定。DisplayItemとValueItemプロパティを、それぞれ"Name"と"ItemData"に設定。
 例は、MSDN(VS.NET2003のヘルプ)の、ListControlの項目にあります。
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-09-15 18:25
どうもです。参照されたマイクロソフトのサイトを拝見しました。

元々VB6ではコンボボックスにItemDataプロパティがあってインデックスとは別にキーになるコードを持たせることが出来ました。例えばあるマスターテーブルの内容をコンボボックスに格納する時にそのテーブルのキーになるフィールドの値を格納してた訳です。

.netではItemDataプロパティがなくなったのでVB6から.netに変換するときの回避策として参照された例のような回避策がなされたのでしょうね。

たとえばデータ元のDataTableをループさせていいのであればご希望は叶いそうですが、そうでなければコードが"CD004"のように連続した規則性のあるものであれば数値の部分を数値型に変換してSelectedIndexに対応させるとかですかねー。

VB6の時代でも結局ItemDataを元にIndexを求めて指定していましたから^^
PoH
常連さん
会議室デビュー日: 2003/09/09
投稿数: 48
投稿日時: 2004-09-16 09:55
Jitta様、とっと様返答ありがとうございました。
DataSourceに配列の変数をいれる方法で解決いたしました^^

ちなみにこの場合値をとる時は
.SelectedValue・・・(CD)と.SelectedText・・・(NAME)ではなく
.SelectedValue・・・(CD)と.Text・・・(NAME)なんですねぇ

一応、今後過去ログ検索の為、対応したコード書いて
このスレを締めさせていただきます。

ありがとうございました


コード:

'---------------------------------------------------------------------
' コンボボックス設定
'---------------------------------------------------------------------
Private Sub コンボボックスセット()

Dim Ds As MstDataset = New MstDataset
Dim row As DataRow
Dim i As Integer
Dim NAME As String '名称
Dim CD As Integer 'コード

Dim mylists As ArrayList = New ArrayList

ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList

'これはデータを取得しています
getData("TEST_TABLE", Ds)

For i = 0 To (Ds.Tables("TEST_TABLE").Rows.Count) - 1
row = Ds.Tables("TEST_TABLE").Rows(i)
'名称、コードを取得
NAME = row("DISPLAY_NAME").ToString()
CD = row("CD")
'配列にADD
mylists.Add(New MyList(NAME, CD))
Next i

'コンボボックスにデータをセット
ComboBox1.DataSource = mylists
ComboBox1.DisplayMember = "Name"
ComboBox1.ValueMember = "ItemData"

End Sub




[ メッセージ編集済み 編集者: PoH 編集日時 2004-09-16 09:57 ]
1

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