■No55444 (daibo さん) に返信
> x = (double)dataGridView1.Rows[i].Cells[1].Value;
> の部分で、'System.InvalidCastException'のハンドルされていない例外が発生しました。
まず、Value プロパティは object 型ですよね。
そのオブジェクトの中身を double 型にキャストできなかったというエラーかと。
MessageBox.Show( dataGridView1.Rows[i].Cells[1].Value.GetType().FullName );
などとして、元の型を確認してみてください。
下記の【第7章 キャストとデータ変換】あたり。
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/index/index.html
----------------------------------------
object o1 = 1.23D; // Double 型(double)
object o2 = 1.23F; // Single 型(float)
object o3 = 123; // Int32 型(int)
object o4 = "1.23"; // String 型(string)
double x;
// Double 値なのでキャスト成功
x = (Double)o1;
// Double では無いのでキャストできない
x = (Double)o2; // 例外:InvalidCastException(実行時エラー)
x = (Double)o3; // 例外:InvalidCastException(実行時エラー)
x = (Double)o4; // 例外:InvalidCastException(実行時エラー)
// 元の型にキャストしてから代入する場合
x = (Double)(Single)o2; // Single → Double への拡大変換はOK
x = (Double)(Int32)o3; // Int32 → Double への拡大変換はOK
// x = (Double)(string)o4; // String → Double は変換不可(コンパイルエラー)
// 拡大変換の場合は暗黙変換可能
x = (Single)o2; // Single 値を Double 型に入れる場合は、キャストを省略できる
x = (Int32)o3; // Int32 値を Double 型に入れる場合は、キャストを省略できる
// String からの変換には、Parse や Convert を用いる
x = Double.Parse((string)o4);
x = Convert.ToDouble((string)o4);
|