質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

2952閲覧

C#:ActiveReport 集計したもの同士の計算の仕方

mahry

総合スコア37

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2020/01/08 00:45

前提・実現したいこと

ActiveReport 帳票にデータの集計と、その集計同士の加減結果を出力したいと思っています。
例)たとえば請求書発行で、「今回請求額の集計結果」と「請求書発行前に入金された金額の集計結果」の計算

 請求書No.000002
|請求済額|入金額|繰越金額|御買上金額|今回請求額
|:--|:--:|--:|
|¥25,000|¥30,000|¥ -5,000|¥20,000|¥15,000

御買上金額 + 繰越金額 で今回請求額を出したいと思っています。
御買上金額、繰越金額ともに集計処理をしており、最終的に上記のように集計結果を計算したいと思っているのですが、
単純に集計結果を入れているtextboxを数値にConvertして計算させたあとに今回請求額に出力する、という方法ではうまくできませんでした。

C#

1txtThisTimeBillingAmount.DataField = nameof(BillingReport.BillingAmount) 2txtThisTimeBillingAmount.SummaryRunning = SummaryRunning.None; 3txtThisTimeBillingAmount.SummaryType = SummaryType.GrandTotal; 4txtThisTimeBillingAmount.OutputFormat = "#,##0"; 5txtCarryoverAmount.DataField = nameof(BillingReport.CarryoverAmount) 6txtCarryoverAmount.SummaryRunning = SummaryRunning.None; 7txtCarryoverAmount.SummaryType = SummaryType.GrandTotal; 8txtCarryoverAmount.OutputFormat = "#,##0"; 9 10//集計後 11var ThisTimeBillingAmount = Convert.ToInt32(txtThisTimeBillingAmount.Text); 12var CarryOverAmount= Convert.ToInt32(txtCarryoverAmount.Text); 13var Sum = ThisTimeBillingAmount + CarryaOverAmount; 14txtBillingAmountSum = Sum.ToString("#,##0"); 15

発生したエラー

System.FormatException: 入力文字列の形式が正しくありません。

初歩的な質問だとは思いますが、アドバイスいただけたらと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

workaholist

2020/01/08 01:46

txtBillingAmountSum は string 型の変数ですか?
mahry

2020/01/08 03:04

String型の変数です。ご指摘頂いたことで無事自己で解決方法を思いつくことができました。ありがとうございます。
workaholist

2020/01/08 05:07

TextBox型かなと思ったのですが解決したようで良かったです。
guest

回答1

0

自己解決

型についてのご指摘を頂き、自力で解決することができました。

まず前提として、集計結果はStringでした。
OutputFormatで"#,##0"で指定している通り、例えば
御買上額合計:50000
のとき、出力結果は「50,000」とカンマが入ります。
この状態で数値型に型変換をしようとしていたから「入力文字列の形式が正しくありません」とエラーが出ていました。とても初歩的なミスでした、お手数おかけしてすみません。

集計後(beforePrint)

C#

1private long GetNumbers(string value) 2 { 3 Regex a = new Regex(@"[^0-9]+"); 4 var item = a.Replace(value, ""); 5 return Convert.ToInt64(item); 6 } 7 8var ThisTimeBillingAmount = GetNumbers(txtThisTimeBillingAmount.Text); 9var CarryOverAmount= GetNumbers(txtCarryoverAmount.Text); 10var Sum = ThisTimeBillingAmount + CarryaOverAmount; 11txtBillingAmountSum.Text = Sum.ToString("#,##0");

上記のように一度カンマや記号を省いて数値のみを取り出して計算を行うことでエラーを解消できました。

投稿2020/01/08 03:05

mahry

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

workaholist

2020/01/08 05:15

自力でやらなくても var i = int.Parse("50,000", NumberStyles.AllowThousands); でできますよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問