2017-08-22 6 views
-3

私はデータグリッドビューの列の合計を取得するために、次のコードを使用しています。C#合計の問題

private void button16_Click(object sender, EventArgs e) 
{ 
    int sum = 0; 
    for (int i = 0; i < dataGridView4.Rows.Count; ++i) 
    { 
     sum += Convert.ToInt32(dataGridView4.Rows[i].Cells[10].Value); 
    } 
    try 
    { 
     decimal tot = 0; 
     for (int i=0; i <= dataGridView4.RowCount -1; i++) 
     { 
      tot += Convert.ToDecimal (dataGridView4.Rows[i].Cells[10].Value); 
     } 
     if (tot==0) {} 
     textBox34.Text = tot.ToString(); 
    } 
    catch(Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
    } 
} 

私は、エラーメッセージを取得しています

入力文字列が正しい形式ではありませんでした。

問題が書式設定にあることがわかりました。その列のSQLサーバーのデータ型がお金になるとします。 SQLサーバーはこの形式に保存する番号を変更します。 00.0000 たとえば、10を保存すると、SQL Serverは10.0000として保存します。

(。)を削除するとエラーは表示されません。

私が10.0000 + 3.0000を合計しようとすると、決してうまくいかない。

アイデア?

+1

あなたのグリッド列の値をどのように表示されますか?小数点の区切り文字(カンマなど)を持っていますか、区切り記号として使用していますか? – Steve

+0

ロケールに問題があります。あなたのコンピュータで設定された言語は小数点を区切るために '.'以外のものを使用しますか? – litelite

+0

私は多くのコンピュータでそれを試しましたが、それらはすべて(、) – MicrosiM

答えて

0

問題は、小数点を含む値をstringからintに変換しようとしていることです。 DB内でmoneyデータ型を使用する場合、コードで使用する最適なデータ型はdecimalです。

int val = Convert.ToInt32("10.00"); 

(あなたが受けているものである)、次のエラーを得られます:

未処理の例外:にSystem.FormatException:入力文字列だっWhat is the best data type to use for money in C#

の答えはそうすることを参照してください。 正しい形式ではありません。

あなたはConvert.ToDecimal()方法使用して値を変換することができます:

:あなたは、あなたがあなたの要件に基づいて、以下のいずれかの方法を使用することができる値の小数部分を削除したい場合は

decimal val = Convert.ToDecimal("10.00"); 

decimal val2 = Math.Round(val); 

または:

decimal val2 = Math.Truncate(val); 

あなたは、単に文字列としてではなく小数部分せずに値を返したい場合は、次のことができます次のようにしてください:

decimal val = Convert.ToDecimal("10.00"); 
Console.WriteLine(val.ToString("0.#")); 

編集:あなたのコード内ので

、変更:

int sum = 0; 

for (int i = 0; i < dataGridView4.Rows.Count; ++i) 
{ 
    sum += Convert.ToInt32(dataGridView4.Rows[i].Cells[10].Value); 
} 

の場合:

decimal sum = 0; 

for (int i = 0; i < dataGridView4.Rows.Count; ++i) 
{ 
    sum += Convert.ToDecimal(dataGridView4.Rows[i].Cells[10].Value); 
} 
+0

助けてくれてありがとう、私のコードを編集して調整する場所を教えてください。 – MicrosiM

+0

@MicrosiMあなたが変更する必要があることを示す答えを更新しました。あなたの問題を解決するのに役立つならば、答えを受け入れるようにしてください。 – mscheker

+0

今は完璧に動作しています。 – MicrosiM