C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: DataGridDiewのセルをコンボボックスとする


(過去ログ 37 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■19048 / inTopicNo.1)  DataGridDiewのセルをコンボボックスとする
  
□投稿者/ KGM (1回)-(2008/05/19(Mon) 17:06:17)

分類:[C#] 

調べても同様の現象が見当たらなかったので
どうかご教授いただければと思います。

さて、その問題ですが

DataGridViewに何列か作ったうちの一つをコンボボックス(DataGridViewComboBoxColumn)にしたいと思っているのですが、

DataPropertyNameプロパティにテーブルの項目名を指定すると以下のエラーが出てしまいます。

---------------------------------------
DataGridViewで次の例外が発生しました

System.Format.Exception: DataGridComboBoxCellの値が有効ではありません

この規定のダアイログを置き換えるには、DataErrorイベントをハンドルしてください。
---------------------------------------

試行錯誤の末、
DataPropertyNameプロパティに列の名称(NAMEプロパティ)を指定することで
コンボボックスは使用できるようにはなりましたが、
別の項目に移動した途端値がnullになってしまうので結局意味がありませんでした。


参考までに、コードも載せておきます。

DataTable MntTable = new DataTable("MonthTable");
MntTable.Columns.Add("Disp", typeof(string));
MntTable.Columns.Add("Val", typeof(int));

MntTable.Rows.Add(" ", DBNull.Value);
MntTable.Rows.Add("あ", 1);
MntTable.Rows.Add("い", 2);
MntTable.Rows.Add("う", 3);

DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn();

column.DataPropertyName = "数値";

column.DataSource = MntTable;
column.ValueMember = "Val";
column.DisplayMember = "Disp";

column.HeaderText = "コンボ数値";
column.Name = "TCol_COM数値";

this.dgvTEST.Columns.Insert(1, column);


よろしくお願いいたします。

引用返信 編集キー/
■19132 / inTopicNo.2)  Re[1]: DataGridDiewのセルをコンボボックスとする
□投稿者/ KGM (2回)-(2008/05/20(Tue) 14:19:22)
http://dobon.net/vb/dotnet/datagridview/datagridviewcomboboxcolumn.html
ここなどから
検索してサンプルなどをみて記述したのですが、
やはりどこが違うのか見出すことができません。

目的も言語も違いますが、
DataGridViewでのコンボボックスを使用するという点で
同様のエラー文のものもみつけましたが
やはり違うようです。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=38145&forum=7&7

先にあげたサンプル以外でも特別なことをしているようにも思えませんし、
コンボボックスではなくチェックボックスにした場合
テーブルとのリンクがテキストボックスの場合と同様に容易にできているので
不可思議でなりません。

なにか、解決の糸口になりそうなヒントでもあればと思います。
見落としていそうな場所、
もしかしたらなどといった提案でも何でも良いですのでなにかご意見いただければと思います。

よろしくお願いします。


引用返信 編集キー/
■19143 / inTopicNo.3)  Re[2]: DataGridDiewのセルをコンボボックスとする
□投稿者/ 特攻隊長まるるう (129回)-(2008/05/20(Tue) 14:41:47)
2008/05/20(Tue) 14:47:09 編集(投稿者)

No19132 (KGM さん) に返信
新規プロジェクトで作り直してみたら?

っつか
>this.dgvTEST.Columns.Insert(1, column);
これが通るって事は、少なくとも1つはデザイン画面で
カラムの追加してるよね?都合の悪いような設定を
しているのでは?
引用返信 編集キー/
■19145 / inTopicNo.4)  Re[3]: DataGridDiewのセルをコンボボックスとする
□投稿者/ KGM (3回)-(2008/05/20(Tue) 14:47:14)
No19143 (特攻隊長まるるう さん) に返信
> 新規プロジェクトで作り直してみたら?

あー、なるほど

やはりこの現象自体異常なんですね・・・

ちょっとやってみます!

引用返信 編集キー/
■19146 / inTopicNo.5)  Re[1]: DataGridDiewのセルをコンボボックスとする
□投稿者/ Megg (1回)-(2008/05/20(Tue) 15:00:21)
No19048 (KGM さん) に返信

> ---------------------------------------
> DataGridViewで次の例外が発生しました
> 
> System.Format.Exception: DataGridComboBoxCellの値が有効ではありません
> 
> この規定のダアイログを置き換えるには、DataErrorイベントをハンドルしてください。
> ---------------------------------------

はじめまして。Meggと申します。

以前、業務でほぼ同じような状況とエラーメッセージに出くわしたことがあります。
そのときは確か、エラーメッセージに従って使っていたDataGridViewのDataErrorイベントをハンドルし、
そこに

e.Cancel = false;

とした記憶があります。

ただ、どうやらもう一度プロジェクトから作り直す方向に変更なされたようなので、
「ああ、こんなのもあるのか」という程度に留めて頂ければ…。

引用返信 編集キー/
■19156 / inTopicNo.6)  Re[2]: DataGridDiewのセルをコンボボックスとする
□投稿者/ KGM (4回)-(2008/05/20(Tue) 16:09:59)
2008/05/20(Tue) 16:21:48 編集(投稿者)

新たに別プロジェクトを一から簡易的ではありますが
作ると、できました。

ですが、やはり現在のプロジェクトに新規で作成すると
同様の現象が出てしまいますね。


No19146 (Megg さん) に返信
> そのときは確か、エラーメッセージに従って使っていたDataGridViewのDataErrorイベントをハンドルし、
> そこに
>
> e.Cancel = false;
>

この手段で試させていただこうと思います。
引用返信 編集キー/
■19157 / inTopicNo.7)  Re[3]: DataGridDiewのセルをコンボボックスとする
□投稿者/ KGM (5回)-(2008/05/20(Tue) 16:13:23)
No19143 (特攻隊長まるるう さん) に返信

> >this.dgvTEST.Columns.Insert(1, column);
> これが通るって事は、少なくとも1つはデザイン画面で
> カラムの追加してるよね?都合の悪いような設定を
> しているのでは?

この記述に今気づきました。すみません。

たしかに、デザイン画面では複数追加しています。

"都合の悪い設定"とは、たとえばどういったことでしょうか??
引用返信 編集キー/
■19176 / inTopicNo.8)  Re[1]: DataGridDiewのセルをコンボボックスとする
□投稿者/ KGM (6回)-(2008/05/20(Tue) 18:46:59)
> e.Cancel = false;

を試してみると
エラーはでなくなるものの、
表示用の値ではなく実データの値が表示されてしました。

ということで、今回はコンボボックスをあきらめ
別の手段を使うことになりました。


もうしわけありません、ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -