DataGridViewのコンボボックスについて

解決


fumofumofit  2009-11-05 20:35:04  No: 142765

開発環境: WinXP(SP3) VB2005  Oracle 9i

http://dobon.net/vb/dotnet/datagridview/datagridviewcomboboxcolumn.html

上記のサンプルを参考にして、
あるテーブルを DataGridView  に表示して
その中の数値列をコンボボックスを追加しているのですが
下記エラーが発生します。

System.ArgumentExceptoin:DataGridViewComboBoxCell の値が
有効ではありません

テーブルの型、コンボボックスに追加する型を文字列に
するとエラーは発生しません。
DataGridViewのコンボボックスは数値型に対応していないので
しょうか?ご教授願います。

-- コンボボックス設定コード --

Dim column1 As New DataGridViewComboBoxColumn()
'ComboBoxのリストに表示する項目を指定する
column1.Items.Add(0)
column1.Items.Add(1)
column1.Items.Add(1.5)
column1.Items.Add(2)
column1.Items.Add(2.5)

'式列にバインドされているデータを表示する
column1.DataPropertyName = "頻度"
'式列の代わりにComboBox列を表示する
DataGridView1.Columns.Insert
               (DataGridView1.Columns("頻度").Index, column1)
DataGridView1.Columns.Remove("頻度")
column1.Name = "頻度"

そのた不明な点等がございましたらご指摘お願いします。


魔界の仮面弁士  2009-11-05 20:58:46  No: 142766

http://dobon.net/vb/dotnet/datagridview/datagridviewcomboboxcolumn.html
> 上記のサンプルを参考にして、
だったら、DOBON.NET の掲示板を利用すれば良いのに…。(^^;

> 下記エラーが発生します。
コンボボックスの一覧に無いデータが現れた場合、そのようなエラーとなります。

回避策は、コンボボックスに適切な項目を割り当てておくことです。また、
メッセージを出さなくするだけなら、DataGridView の DataError イベントも使えます。

> column1.Items.Add(1)
『Integer 型 の 1』を追加していますね。

> column1.Items.Add(1.5)
『Double 型 の 1.5』を追加していますね。

> DataGridViewのコンボボックスは数値型に対応していないので
> しょうか?ご教授願います。
元データの "頻度" 列の型は何ですか?

たとえば、その列が Double 型であるならば、コンボボックス側も
        column1.Items.Add(0.0)
        column1.Items.Add(1.0)
        column1.Items.Add(1.5)
        column1.Items.Add(2.0)
        column1.Items.Add(2.5)
などとする必要がありますし、元データが Decimal 型ならば
        column1.Items.Add(0D)
        column1.Items.Add(1D)
        column1.Items.Add(1.5D)
        column1.Items.Add(2D)
        column1.Items.Add(2.5D)
などとせねばなりません。


fumofumofit  2009-11-05 22:08:31  No: 142767

魔界の仮面弁士さんアドバイスありがとうございます。

>だったら、DOBON.NET の掲示板を利用すれば良いのに…。(^^;
確かにそうですね(^^;
こちらの掲示板で質問することが多く他の掲示板で
質問することが思いつきませんでした(^^;

>元データの "頻度" 列の型は何ですか?
調べると Decimal型でしたので
        column1.Items.Add(0D)
        column1.Items.Add(1D)
        column1.Items.Add(1.5D)
        column1.Items.Add(2D)
        column1.Items.Add(2.5D)
で上手くいきました(^^

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加