- PR -

ComboBoxの先頭に空白行を挿入したい

1
投稿者投稿内容
さくら
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 76
投稿日時: 2005-01-12 16:42
現在、VB.NETを用いてWindowsアプリを開発しています。

ユーザーがコンボを開き、その中に選択する項目が存在しなかった場合は
先頭の空白行を選択するということがやりたいのですが、
コンボボックスにデータベース(Oracle9i)から取得してきた値をセットし、
その後、先頭に空白行を挿入しようとすると
「データソース プロパティを設定したときに Items コレクションを変更できません。」
このようなエラーが発生します。
実際のソースは下記の通りです。

----------------------------------------------------------
ComboBox1.DataSource = DtSet_Name.Tables("STATE")
ComboBox1.DisplayMember = "STATE_NAME"
ComboBox1.ValueMember = "STATE_NAME"
ComboBox1.Items.Insert(0, "")
(※ComboBox1.Items.Add("")も試しましたが同様のエラーとなりました。)
(※ComboBox1.SelectedIndex = -1も試しましたが、
 これは初期表示時のみしか使えないので断念しました。)
----------------------------------------------------------

もし、私がやりたいことを実現しようとすれば
Oracleから取得した値をDataTableに入れた後、
そのDataTableに行を1行追加して空白行を入れ、
DataSourceにそのDataTableをセットするという方法しか
思い浮かばないのですが、他にもっと簡単に実現できる方法を
ご存知の方がおられましたらぜひご教授ください。
よろしくお願い致します!!
Os_
ベテラン
会議室デビュー日: 2003/04/16
投稿数: 77
投稿日時: 2005-01-12 17:16
ComboBoxのDataSourceにデータをBindした場合、Items.Addはできません。

空白行の追加が必要であれば、
元のDtSet_Name.Tables("STATE") に追加する方法があります。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2005-01-12 17:24
さくらさん、こんばんは。

Oracle からデータを取得する時点で空行を追加しておくとか。

コード:
select 0, '' from dual
union
select field1, field2 from table1
order by 1



# 私ならデータバインディングは使わずに自前でアイテムを操作します。
opanium
会議室デビュー日: 2003/07/01
投稿数: 12
投稿日時: 2005-01-13 00:17
こんばんわ
DtSet_Name.Tables("STATE") をDataViewにいれてから、
DataViewRowで追加してみてはどうでしょう?
さくら
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 76
投稿日時: 2005-01-13 09:19
お返事ありがとうございます!

やはりコンボボックスにデータをバインドする前に、
データが格納されているDataTable(などの非接続型クラス)に対して
空白行を追加するか、データを取得するときに空白行も一緒に
取ってくるかしか方法はないですかね。
他にもっといい方法があるのではないかと踏ん切りがつかなかったのですが、
本件は上記どちらかの方法で対応したいと思います!
早急なご回答ありがとうございました!

1

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