- PR -

comboboxの初期値について

投稿者投稿内容
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2004-08-20 16:50
msoです。


まいど質問ばかりで申し訳ありませんが、
また質問があります。


VB.NETでComboBOXを扱っているのですが、DataSourceで
ComboBoxの値をセットした際に表示される初期値を空白にしたいと思っています。

現在は
コード:
objCombo.DataSource = dtShop
objCombo.DisplayMember = "hoge"
objCombo.ValueMember = "foo"


というようにやっているのですが、
初期値にはhoge列の値が表示されます。
空白を表示させるにはどうしたらいいのでしょうか?

さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2004-08-20 17:08
さかもと と申します。

フォーム上でコンボボックスが表示された際に、まずどの項目が表示されているか?
ということで宜しいでしょうか?
私は以下のように行っています。

====================================================
'/読み込み時にはコンボボックスの一番上Nullが選択されているようにする
cmbA.SelectedIndex = -1
=====================================================
0が1番目で1が2番目・・・、0番目なら-1 らしいです。
Indexの番号を変えれば何番目の項目が選択されているかどうかを
設定できるようです。

見当違いならすいません。
Micky
大ベテラン
会議室デビュー日: 2002/09/04
投稿数: 137
投稿日時: 2004-08-20 17:16
Mickyでございます。

引用:

msoさんの書き込み (2004-08-20 16:50) より:

空白を表示させるにはどうしたらいいのでしょうか?




ちょっと前に自分も結構調べたり、いじりまわしたりしたのですが、
中々いい方法が見つかりませんでした。

そこで、元になるDataTableのCloneを作成して
最初に表示させたい空白データ行を追加します。
その後に基のDataTableのデータを全てコピーすれば
最初に空白行が表示されます。

全行コピーなのでパフォーマンスに問題があるような気もしましたが
ComboBoxに表示するデータですから、膨大な数になるような事もないでしょう。

もっとスマートな方法があったら、自分も知りたいです。(^^;
以前にも同じ様な話題があったような気もするのですが、
今検索したところみつけられませんでした。
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2004-08-20 17:43
msoです。


さかもとさん

SelectedIndex = -1でやってみたのですが、
変わりませんでした。
VS2003で開発をやっているのですが何かあるのでしょうか?

Mickyさん
空データを作成してから、全件コピーという方法は最終手段として
やろうと思います。

自分の方法が何かおかしいのかもしれないので、もうちょっと
見直してみます。
#SelectedIndex = -1で大丈夫だと思うのになぁ。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-20 18:13
直接参照せず、ビューを取得して、ビューに空白を追加してから、コントロールにバインドさせた・・・ような?

ちょっと記憶が曖昧。ソースも見つからない...
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2004-08-20 18:15
さかもと です。

すいません、私が初心者なもので見当違いな返答でした。
私が取っている方法は読み取ったデータを一件ずつ
CommboA.Items.Add("xxx")
で追加している為うまくいっているようです。

件数が多くなると少しストレスになりますが、下記のサイトを参考にさせて
頂き対応を取っています。

http://dobon.net/vb/dotnet/control/lbitemsadd.html
(URLの提示はこの方法で宜しいのでしょうか・・・?)

何か他のスマートな方法があれば私も知りたいところです・・・。

mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2004-08-20 18:29
msoです

さかもとさんへ

selectedindex=-1でもうまくいくケースがありました。
自作コントロールにあるcomboBoxはなぜかうまくいきませんが、
普通にフォーム上にいるものは大丈夫でした。

Jittaさんへ

方法ありがとうございます。
検討させていただきます。
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2004-08-21 21:20
msoです。

自宅でVS2002を使って、ComboBoxの対応を検討していました。
そこでMSDNのヘルプを見ながら作っていたのですが、MSDNのサンプルの
使い方がうまくわからず悩んでいます。

ComboBoxのDataSourceをヘルプで探していたら下記のソースを
MSDNから見つけることが出来ました。
ただ、USStateについてはどのように作ればいいのか分かりません。
なんか見たことのあるデザインパターンパターンっぽいのですが、
まだ理解することが出来ません。

申し訳ありませんが、何をやっているのか教えていただけないでしょうか?

コード:
' Populates the list box using DataSource. 
' DisplayMember is used to display just the long name of each state.
Dim USStates As New ArrayList()
USStates.Add(New USState("Washington", "WA"))
USStates.Add(New USState("West Virginia", "WV"))
USStates.Add(New USState("Wisconsin", "WI"))
USStates.Add(New USState("Wyoming", "WY"))

ListBox1.DataSource = USStates
ListBox1.DisplayMember = "LongName"
ListBox1.ValueMember = "ShortName"

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