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

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

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

Re[3]: DataGridView のセルに数値を手入力して計算する


(過去ログ 171 を表示中)

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

■98575 / inTopicNo.1)  DataGridView のセルに数値を手入力して計算する
  
□投稿者/ 星は昴 (30回)-(2021/12/04(Sat) 17:28:56)

分類:[C#] 

 以下は DataGridView のセルに数値を入力して、各行の合計を計算するコードです。乱数を発生させて、その数値をセルにコピーしたときの計算はできるのですが、セルに数値を手入力した場合はBtnCalc_Clickの

  Sum += (double)DataGrid.Rows[i].Cells[j].Value;

で「System.InvalidCastException: '指定されたキャストは有効ではありません。'」という実行エラーが出ます。
 手入力した数値の計算もできるようにするにはどうしたらいいのでしょうか?

private void BtnRandom_Click(object sender, EventArgs e)
{
    int i, j;
    double rnum;
    var Rand = new Random();

    for (i = 0; i < DataGrid.RowCount-1; i++)
        for (j = 0; j < DataGrid.ColumnCount-1; j++)
        {
            DataGrid.Columns[j].DefaultCellStyle.Format = "N3";
            rnum = (double)Rand.Next(1, 99) + Rand.NextDouble();
            DataGrid.Rows[i].Cells[j].Value = rnum;
        }
}

private void BtnCalc_Click(object sender, EventArgs e)
{
    int i, j;
    double Sum;
    for (i = 0; i < DataGrid.RowCount - 1; i++)
    {
        Sum = 0;
        for (j = 0; j < DataGrid.ColumnCount - 1; j++)
            Sum += (double)DataGrid.Rows[i].Cells[j].Value;
        DataGrid.Rows[i].Cells[DataGrid.ColumnCount - 1].Value=Sum;
    }
}

引用返信 編集キー/
■98577 / inTopicNo.2)  Re[1]: DataGridView のセルに数値を手入力して計算する
□投稿者/ KOZ (181回)-(2021/12/04(Sat) 19:22:42)
2021/12/04(Sat) 19:23:15 編集(投稿者)
No98575 (星は昴 さん) に返信
> で「System.InvalidCastException: '指定されたキャストは有効ではありません。'」という実行エラーが出ます。

手入力したときは、DataGrid.Rows[i].Cells[j].Value に String が入っていると思います。

String か Double のどちらかしか入ってないのであれば

    double dbl;
    object obj = DataGrid.Rows[i].Cells[j].Value;
    string str = obj as string;
    if (str != null) {
        double.TryParse(str, out dbl);
    } else {
        dbl = (double)obj;
    }
    Sum += dbl;

何が入っているかわからないときは、string に変換して

    object obj = DataGrid.Rows[i].Cells[j].Value;
    string str = Convert.ToString(obj);
    double dbl;
    double.TryParse(str, out dbl);
    Sum += dbl;

ですかね。

引用返信 編集キー/
■98578 / inTopicNo.3)  Re[2]: DataGridView のセルに数値を手入力して計算する
□投稿者/ 星は昴 (31回)-(2021/12/04(Sat) 20:20:50)
No98577 (KOZ さん) に返信

 丁寧な回答まことにありがとうございました。

> 手入力したときは、DataGrid.Rows[i].Cells[j].Value に String が入っていると思います。
 ほー、そうなんですね。
 入力するときは 0〜9、-、小数点しか受け付けないようにしているので

> String か Double のどちらかしか入ってないのであれば
>
> double dbl;
> object obj = DataGrid.Rows[i].Cells[j].Value;
> string str = obj as string;
> if (str != null) {
> double.TryParse(str, out dbl);
> } else {
> dbl = (double)obj;
> }
> Sum += dbl;
>

でOKでした。
解決済み
引用返信 編集キー/
■98579 / inTopicNo.4)  Re[3]: DataGridView のセルに数値を手入力して計算する
□投稿者/ KOZ (182回)-(2021/12/04(Sat) 20:46:22)
2021/12/04(Sat) 21:07:05 編集(投稿者)

No98578 (星は昴 さん) に返信
>>手入力したときは、DataGrid.Rows[i].Cells[j].Value に String が入っていると思います。
>  ほー、そうなんですね。

いや、そこはデバッガで確認しましょうよ

>  入力するときは 0〜9、-、小数点しか受け付けないようにしているので

"1234" と 1234 は違うものでしょう。

object obj1 = "1234";
object obj2 = 1234;
object obj3 = 1234d;

double dbl1 = (double)obj1; // 実行時エラー
double dbl2 = (double)obj2; // 実行時エラー
double dbl3 = (double)obj3; // 〇

double dbl4 = (double)"1234"; // コンパイルエラー
double dbl5 = (double)1234; // 〇
double dbl6 = (double)1234d; // 〇

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


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

このトピックに書きこむ

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

管理者用

- Child Tree -