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

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

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

Re[4]: DataGridViewで例外が発生しました


(過去ログ 96 を表示中)

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

■57582 / inTopicNo.1)  DataGridViewで例外が発生しました
  
□投稿者/ インデックス (1回)-(2011/03/05(Sat) 17:10:29)

分類:[C#] 

1列目にDataGridViewImageColumnで画像を、2列目・3列目にはテキストを表示させたいのですが
例外のエラーが表示されて上手くいきません。
どうすれば1列目に画像、2・3列目にテキストを表示出来るのでしょうか?

↓エラーメッセージ
DataGridViewで次のエラーが発生しました

System.FormatException:値 'DataGridViewImageColumn{
name=imageColumn,Index=0}'を型'Image'に変換出来ません。
場所
System.Windows.Forms.Formatter.FormatObjectInternal(Object
 value, Type targetType, TypeConverter sourceConverter,
 TypeConverter targetConverter, String formatString,
 IFormatProvider formatInfo, Object formattedNullValue)
   場所 System.Windows.Forms.Formatter.FormatObject(Object
 value, Type targetType, TypeConverter sourceConverter,
 TypeConverter targetConverter, String formatString,
 IFormatProvider formatInfo, Object formattedNullValue, Object
 dataSourceNullValue)
   場所
 System.Windows.Forms.DataGridViewCell.GetFormattedValue(Object
 value, Int32 rowIndex, DataGridViewCellStyle& cellStyle,
 TypeConverter valueTypeConverter, TypeConverter formattedValueTypeConverter,
 DataGridViewDataErrorContexts context)

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


private void button1_Click(object sender, System.EventArgs e)
        {
            string no = "1";
            string name = "テキスト";
            string add = "補足";
                     
            DataGridViewImageColumn imageColumn = new DataGridViewImageColumn();
            imageColumn.Name = "imageColumn";
            imageColumn.Image = new Bitmap("C:\\picture\\pic.jpg");
            imageColumn.ImageLayout = DataGridViewImageCellLayout.Zoom;
            imageColumn.Description = "画像";
            this.dataGridView1.Columns.Add(imageColumn);
            this.dataGridView1.Columns.Add("no", "番号");
            this.dataGridView1.Columns.Add("name", "名前");
            this.dataGridView1.Columns.Add("add", "補足・説明");

            DataGridViewColumn column1 = dataGridView1.Columns[1];
            column1.Width = 20;

            DataGridViewColumn column2 = dataGridView1.Columns[2];
            column2.Width = 180;

            DataGridViewColumn column3 = dataGridView1.Columns[3];
            column3.Width = 270;

            dataGridView1["imageColumn", 0].Value = new Bitmap("C:\\picture\\pic.jpg");
            this.dataGridView1.Rows.Add(imageColumn,no,name,add);
        }

引用返信 編集キー/
■57585 / inTopicNo.2)  Re[1]: DataGridViewで例外が発生しました
□投稿者/ やじゅ (1853回)-(2011/03/05(Sat) 19:50:36)
やじゅ さんの Web サイト
No57582 (インデックス さん) に返信
No57553 (上条 さん) に返信
> dataGridView1["imageColumn", 0].Value = new Bitmap("C:\\picture\\pic.jpg");
> this.dataGridView1.Rows.Add(imageColumn,no,name,add);

下記のようにすれば、エラーはでなくなります。
this.dataGridView1.Rows.Add(new Bitmap("C:\\picture\\pic.jpg"),no,name,add);


引用返信 編集キー/
■57593 / inTopicNo.3)  Re[2]: DataGridViewで例外が発生しました
□投稿者/ インデックス (2回)-(2011/03/06(Sun) 04:17:03)
2011/03/06(Sun) 15:03:28 編集(投稿者)
No57585 (やじゅ さん) に返信
>>            dataGridView1["imageColumn", 0].Value = new Bitmap("C:\\picture\\pic.jpg");
>>            this.dataGridView1.Rows.Add(imageColumn,no,name,add);
> 
> 下記のようにすれば、エラーはでなくなります。
> this.dataGridView1.Rows.Add(new Bitmap("C:\\picture\\pic.jpg"),no,name,add);
> 
> 

回答ありがとうございます。インデックスです。
確かに1行目の第1列目に画像を、2・3・4列目にテキストを表示することが出来ましたが
不必要な2行目(2・3・4列目が空欄の行)が表示される状況です。
this.dataGridView1.Rows.Clear();を使ってリセットしてから
Rows.Addで不必要な2行目を表示しないようにしてみましたがダメでした。
1行目だけ(テキストの値がある行だけ表示させる)にするにはどうしたら良いでしょうか。

行の生成順番は
画像|空欄|空欄|空欄|が作られたあと、その上に画像|2列目|3列目|4列目|と表示されるといった感じです。

○ちなみに今のコード
private void button1_Click(object sender, System.EventArgs e)
        {
            string no = "1";
            string name = "テキスト";
            string add = "補足";
                     
            DataGridViewImageColumn imageColumn = new DataGridViewImageColumn();
            imageColumn.Name = "imageColumn";
            imageColumn.Image = new Bitmap("C:\\picture\\pic.jpg");
            imageColumn.ImageLayout = DataGridViewImageCellLayout.Zoom;
            imageColumn.Description = "画像";
            this.dataGridView1.Columns.Add(imageColumn);
            this.dataGridView1.Columns.Add("no", "番号");
            this.dataGridView1.Columns.Add("name", "名前");
            this.dataGridView1.Columns.Add("add", "補足・説明");

            DataGridViewColumn column1 = dataGridView1.Columns[1];
            column1.Width = 20;

            DataGridViewColumn column2 = dataGridView1.Columns[2];
            column2.Width = 180;

            DataGridViewColumn column3 = dataGridView1.Columns[3];
            column3.Width = 270;

            this.dataGridView1.Rows.Add(new Bitmap("c:\\co.jpg"),no,name,add);
            this.dataGridView1.Rows.Clear();
        }


引用返信 編集キー/
■57599 / inTopicNo.4)  Re[3]: DataGridViewで例外が発生しました
□投稿者/ やじゅ (1856回)-(2011/03/06(Sun) 17:42:58)
やじゅ さんの Web サイト
No57593 (インデックス さん) に返信
> 1行目だけ(テキストの値がある行だけ表示させる)にするにはどうしたら良いでしょうか。

//DataGridView1にユーザーが新しい行を追加できないようにする
dataGridView1.AllowUserToAddRows = false;
http://dobon.net/vb/dotnet/datagridview/allownewrow.html
引用返信 編集キー/
■57601 / inTopicNo.5)  Re[4]: DataGridViewで例外が発生しました
□投稿者/ インデックス (3回)-(2011/03/06(Sun) 18:20:58)
No57599 (やじゅ さん) に返信


上手く出来ました、やじゅさん本当にありがとうございます。
同じ問題で悩む方のために成功コードをここに記載します。

private void button1_Click(object sender, System.EventArgs e)
{
string no = "1";
string name = "テキスト";
string add = "補足";
dataGridView1.AllowUserToAddRows = true;
DataGridViewImageColumn imageColumn = new DataGridViewImageColumn();
imageColumn.Name = "imageColumn";
imageColumn.Image = new Bitmap("C:\\picture\\pic.jpg");
imageColumn.ImageLayout = DataGridViewImageCellLayout.Zoom;
imageColumn.Description = "画像";
this.dataGridView1.Columns.Add(imageColumn);
this.dataGridView1.Columns.Add("no", "番号");
this.dataGridView1.Columns.Add("name", "名前");
this.dataGridView1.Columns.Add("add", "補足・説明");

DataGridViewColumn column1 = dataGridView1.Columns[1];
column1.Width = 20;

DataGridViewColumn column2 = dataGridView1.Columns[2];
column2.Width = 180;

DataGridViewColumn column3 = dataGridView1.Columns[3];
column3.Width = 270;

this.dataGridView1.Rows.Add(new Bitmap("c:\\co.jpg"),no,name,add);
dataGridView1.AllowUserToAddRows = false;
}

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -