我使用以下代码来获取数据网格视图中列的总和。
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它就永远不会有效。
有什么想法吗?
答案 0 :(得分: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);
}