- PR -

ComboboxにおけるSelectedValue指定でのデータ選択について

投稿者投稿内容
ほぬ
会議室デビュー日: 2004/02/19
投稿数: 7
投稿日時: 2005-07-19 21:42
Jittaさん、ありがとうございます。

SelectedValue.GetType().ToString() は、System.Int16 です。

DB で型が Int の場合、SelectedValue に値を指定することは可能な状態です。
しかし、DB で型が Smallint の場合、0 や 1 の場合にエラーとなってしまっています。

現在、もう一度、データ型をHELPで調べてみているところです。
ほぬ
会議室デビュー日: 2004/02/19
投稿数: 7
投稿日時: 2005-07-20 10:57
少し見えてきました。

ComboboxのDataSourceであるDatasetを取得した際に、手動で行を追加しているのです。

Dim dr As DataRow
dr = Dataset1.Tables("TEMP").NewRow
dr.Item(0) = -99
dr.Item(1) = "(選択してください)"
Dataset1.Tables("TEMP").Rows.InsertAt(dr, 0)

上記の5行をコメントアウトすれば、SelectedValue = 1 としてもちゃんと
項目を指定することができました。

ということは、上記の3行目でデータ型がおかしくなっているのかと思い、
dr.Item(0) = CType(-99, System.Int16)
としてみたのですが、今までと同様のエラーが出てしまいました。

このあたりを探ってみます。
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-07-20 13:54
こんにちわ。

こちらの環境でも再現しました。
うーん、あやしいですねこれ。

何があやしいって、まず第一に、-10とか、50とか、明らかに存在しないValueをセットするとComboBoxが空になるだけで例外は飛ばないこと。SelectedValueのセッタに存在しないValueを指定した場合の動作として何が正しいかはMSDNに明記されてませんでしたが、こっちが正しい動作のような気がします。

第二に、1を指定した時の例外の詳細情報を出してみると…
---
System.ArgumentOutOfRangeException: 指定された引数は、有効な値の範囲内にありません。
パラメータ名 : '-2147483648' は 'index' に有効な値ではありません。
at System.Windows.Forms.ComboBox.set_SelectedIndex(Int32 value)
at System.Windows.Forms.ListControl.set_SelectedValue(Object value)
at VbNetTest.Form1.Button1_Click(Object sender, EventArgs e)
---
なんと例外がset_SelectedIndexから上がってます。つまり、内部でSelectedIndexのセッタにInt32.MinValueをセットしようとしている?

これはひょっとすると.NET Frameworkのバグかもしれないので、追求するならほんとにMicrosoftに問い合わせてみた方がいいかもしれません。

で、現状の回避策としては、
http://www.ailight.jp/blog/iekou/archive/2005/06/23/8487.aspx
こんなの見つけましたけど、

引用:

ほぬさんの書き込み (2005-07-19 13:11) より:
もちろん、この件に関して時間をかけ過ぎても前にはなかなか進めないので、回避方法(SlectedValueからSelectedIndexを取得し、SelectedIndexで指定)を試したらとりあえずその方法で回避できたので、


この方法が一番シンプルで良いような気がします。
ほぬ
会議室デビュー日: 2004/02/19
投稿数: 7
投稿日時: 2005-07-20 15:02
ほのぼのさん、ありがとうございます。

誠に丁寧にお調べいただき、本当にありがとうございます!

「明らかに存在しないValueをセットするとComboBoxが空になるだけで例外は飛ばない」は、こちらでも同様です。

実際にMicrosoftに問い合わせしてみたいのですが、MSDNのライセンス期間がもう切れてしまっているので今はあきらめます・・・。

自分だけでアレコレ考えて、結局回避方法ですませてしまうには少々心残りだったのですが、こちらで投稿させていただいて何人もの方に御回答いただけてよかったです。

とりあえず、現状として SlectedValueにしたい値からSelectedIndexを取得し、SelectedIndexで指定する方法をとります。

御協力いただいた皆様、ありがとうございました。

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