2017-08-22 49 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服务器将其保存为10.0000

如果我删除了(。)我没有得到任何错误。

如果我试图总结10.0000 + 3.0000,它永远不会解决。

任何想法?

+1

如何显示在您的网格列中的值?你有你的本地分隔符(例如一个逗号)为小数或者你有点作为分隔符? – Steve

+0

听起来像一个区域设置问题。计算机上配置的语言是否使用除。之外的其他内容来分隔小数? – litelite

+0

我在很多电脑上都试过,他们都用(。)如何改变它,(,) – MicrosiM

回答

0

你的问题是你试图将一个小数点的值从字符串转换为int。在数据库中使用money数据类型时,代码中使用的最佳数据类型将为decimal类型。查看What is the best data type to use for money in C#

回答这样算下来:

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

将产生以下错误(这是您收到什么):

未处理的异常:System.FormatException:输入字符串是而不是 正确的格式。

可以使用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