QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

DataGridViewのDataGridViewComboBoxColumnで例外

DataGridViewにカラムを追加して
NameプロパティをDgvColumnType
ColumnTypeプロパティをDataGridViewComboBoxColumn
に設定しました。

DataGridView内のコンボボックスの項目を設定するために
下記を記述しました。
DgvColumnType.DataSource = new Color[]{Color.Black,Color.Red};

実行時に、a,b,cはリスト内にあるのですが、選択すると
「DataGridViewComboBoxCellの値が有効ではありません」
と例外が発生します。

なにが悪いのか分かりません。
ご助言願います。

環境
Windows2000
Visual C# 2005 Express Edition

質問者:hwman

回答

選択されたデータ(Color型)をデータソース(ComboBoxColumnのではなくDataGridViewの)に
バインドできないのではないでしょうか?

DataGridViewはバインドして使っていますか?
バインドしている場合、何にバインドしていますか?
ComboBoxCellに対応している列の型は何ですか?

その辺りを考慮して、Color 型ではなく、
データソースにそのまま格納できる型で ComboBoxColumn のデータソースを設定するか、
あるいは CellParsing イベントで適切な型変換を行う必要があると思います。

投稿者:KI

編集 履歴 (0)

DataGridViewには何もバインドしていません。

それが原因でしょうか?

投稿者:hwman

編集 履歴 (0)

たくじさんの書き込み (2007-09-09 22:26) より:

DataGridViewには何もバインドしていません。

それが原因でしょうか?

そう思うなら試せばいいのに。

投稿者:ぶさいくろう

編集 履歴 (0)

回答する側はずいぶんと乱暴な言葉でもいいんですね・・・

投稿者:hwman

編集 履歴 (0)

確かにそう感じられるかもしれませんね
しかも、今回のように誤ったアドバイスをしても
なんらお咎めなし。

DataGridViewをバインドさせる必要はありませんよ

投稿者:トレプチェット

編集 履歴 (0)

そうか?
掲示板で聞いたら、誰か親切な人がたまたま読んで、答えて、自分がそれを見るまで、答えを得られない。
でも、自分でやってみたら、数分後には答えが得られる。

この差はとても大きいと思う。

どこかで質問者が「私の手間を考えてください」とか曰っていたが、回答者の手間は考えてくれないわけ?そこまで手取り足取りを要求するなら、それなりの対価を払おうよ。

投稿者:Jitta

編集 履歴 (0)

誤解させたようですみません。
バインドしなければいけないと書いたつもりはありません。
DataGridView はバインドさせて使うケースが多いので、
バインドしている前提で説明しました。

バインドしていない場合は、DataGridViewColumn.ValueType に
設定されている型に変換できない場合に、その例外が発生します。

改めて読み直して気づいたのですが、
DataGridViewComboBoxColumn のデータソースに設定したのは Color の配列で、
リストにあるのは「a,b,c」なんですか?
よく状況が飲み込めないです。
その辺りをもう少し詳しく書いて頂けませんか?
色をリストから選ばせたいのかと思ったのですが。

投稿者:KI

編集 履歴 (0)

んー・・・Jittaさんの「それなりの対価を払おうよ。」もうなずけるんだけどね

それより重要なのは、
「自分で試す」
なんだよね。

この業界って、一ヶ月もさぼってると新しい技術が出てきたりして訳分からなくなるくらいだから、人に教えてもらうのを待ってると、全然やっていけなくなるよ。
「そう思うなら試せばいいのに。」というのは適切なアドバイスだと思います。
正解のコード=答え、じゃなくて、問題に対する姿勢への答え、というべきなのかな?

(ここを素直に受け入れられるか受け入れられないか?で、この先やっていけるかいけないか分かれると思う。)

投稿者:冬寂

編集 履歴 (0)

たくじさんの書き込み (2007-09-10 01:39) より:

回答する側はずいぶんと乱暴な言葉でもいいんですね・・・

俺がいつ「質問者は乱暴な言葉を使ってはだめ」なんてこと言ったんだろう?
そして俺のレスのどこが乱暴なの?理由を提示してほしい。
君のレスは「内容が乱暴」だと思う。理由は自分で試すことを怠り相手に委ねているから。

で。これを「咎め」だなんて捉えるヤツ。言いたいことはわかるが一言余分だろ。
最初の回答者の気持ちを考えられないヤツが言っていいセリフではない。

本題っていうか補足要求。

>DgvColumnType.DataSource = new Color[]{Color.Black,Color.Red};
設定しているのってまさかこれだけじゃないよね?
ここ以外のコードも書いた方がいいと思うんだ。
ちなみにPropertyNameの設定をしているとしてイミフな名前をつけていると同じ例外が起きることは確認している。
_________________質問する前にググレカス

投稿者:ぶさいくろう

編集 履歴 (0)

たくじさんの書き込み (2007-09-09 13:53) より:

なにが悪いのか分かりません。

とありますが、

たくじさんの書き込み (2007-09-09 13:53) より:

「DataGridViewComboBoxCellの値が有効ではありません」

と例外が発生します。
これが原因ですから、解決策として、

KIさんの書き込み (2007-09-09 14:31) より:

その辺りを考慮して、Color 型ではなく、

データソースにそのまま格納できる型で ComboBoxColumn のデータソースを設定するか、

あるいは CellParsing イベントで適切な型変換を行う必要があると思います。
ということを試してみましょうという、それだけの話だと思います。
________________R・田中一郎 -  <a href="http://blogs.wankuma.com/rti/" target="blank">R.Tanaka.Ichiro’s Blog

投稿者:R・田中一郎

編集 履歴 (0)

今試してみたら、正常に動きました。

ValueType プロパティが正しく設定されていなかっただけかもしれませんね。
コンストラクタの InitializeComponent(); の後ろに、以下のように設定してみて下さい。

this.Column1.ValueType = typeof(Color);
this.Column1.DataSource = new Color[]{Color.Black, Color.Red};

________________R・田中一郎 -  <a href="http://blogs.wankuma.com/rti/" target="blank">R.Tanaka.Ichiro’s Blog

投稿者:R・田中一郎

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。

この質問に回答する


この質問の答えをご存知ですか? ぜひ質問者に伝えてあげてください (ログインすると、回答フォームが表示されます)。

ログイン