C# 错误:';输入字符串的格式不正确;

C# 错误:';输入字符串的格式不正确;,c#,C#,如果我将单元格[2]更改为单元格[0],效果很好 我还是个C#初学者,但我猜它无法将“挣”列中的数据转换为整数?您应该检查字段是否有数值,然后将其转换为int sum += Convert.ToInt32(dataGridView1.Rows[i].Cells[2].Value); 浮点和=0; 对于(int i=0;i

如果我将单元格[2]更改为单元格[0],效果很好


我还是个C#初学者,但我猜它无法将“挣”列中的数据转换为整数?

您应该检查字段是否有数值,然后将其转换为int

sum += Convert.ToInt32(dataGridView1.Rows[i].Cells[2].Value);
浮点和=0;
对于(int i=0;i
考虑到您的屏幕截图,
单元格[2]
不是一个
int
而是一个
Decimal
和sum应该声明为这种类型

float sum = 0;
for (int i = 0; i < dataGridView1.Rows.Count;++i)
{
    float temp = 0;
    float.TryParse(dataGridView1.Rows[i].Cells[2].Value?.ToString(), out temp);
    sum += temp;

}

label1.Text = sum.ToString();
十进制和=0;
对于(int i=0;i
如果由于某些原因该值为空或错误,可以使用以下方法检查转换是否成功:

十进制和=0;
对于(int i=0;i

注意:
(dataGridView1.Rows[i].Cells[2].Value???)
将对
dataGridView1.Rows[i].Cells[2].Value执行检查。如果为null,则将使用值
“”
,而不是
null
null.ToString()
将引发异常。

试试这个

Decimal sum = 0;
for (int i = 0; i < dataGridView1.Rows.Count;++i)
{
    Decimal temp;
    if (Decimal.TryParse((dataGridView1.Rows[i].Cells[2].Value ?? "").ToString(), out temp))
        sum += temp;
}

label1.Text = sum.ToString();
Decimal sumcol=0;
对于(int i=0;i
属于
对象
类型,这就是为什么
int.TryParse
不编译(
int.TryParse
需要
string
)它说“TryParse方法不需要重载1argument@OmarMohamed更改了
值?.ToString()
-注意
为安全起见,如果
null
System.NullReferenceException:“对象引用未设置为对象的实例。”System.Windows.Forms.DataGridViewCell.Value.get返回null。可能
decimal
是更好的选择(
挣来的
似乎是钱)对不起,但同样(参见阿明·莫兹加尼的回答):
Decimal.TryParse
/
Decimal.Parse
想要
字符串
,而不是
对象
属于
对象类型)System.NullReferenceException:'对象引用未设置为对象的实例。'System.Windows.Forms.DataGridViewCell.Value.get返回null。但是如果我将值更改为值?它显示一个数字(dataGridView1.Rows[i].Cells[2].Value???).ToString()
抛出一个错误?
dataGridView1.Rows[i].Cells[2].Value.ToString()dataGridView1.Rows[i].Cells[2]的值为空,则code>将引发异常。您可以使用.Text代替值,也可以使用'gvw_Search.Rows[i].Cells[1].Text.ToString();'
Decimal sum = 0;
for (int i = 0; i < dataGridView1.Rows.Count;++i)
{
    sum += Decimal.Parse((dataGridView1.Rows[i].Cells[2].Value ?? "").ToString());
}
Decimal sum = 0;
for (int i = 0; i < dataGridView1.Rows.Count;++i)
{
    Decimal temp;
    if (Decimal.TryParse((dataGridView1.Rows[i].Cells[2].Value ?? "").ToString(), out temp))
        sum += temp;
}

label1.Text = sum.ToString();
Decimal sumcol = 0;
for (int i = 0; i < dataGridView1.Rows.Count;++i)
{
Decimal val;
string colval = dataGridView1.Rows[i].Cells[2].Value.ToString();
if(colval  != null){
 if (Decimal.TryParse(colval, out val))
    sum += val;
}

label1.Text = sum.ToString();}