' System.FormatException'发生在mscorlib.dll但未在用户代码中处理

时间:2017-01-06 03:03:21

标签: c# parsing

当我添加第一行时,代码工作正常,但之后它会抛出我

  

mscorlib.dll中出现System.FormatException类型的异常但未在用户代码中处理

我现在已经盯着这段代码了很长一段时间,似乎无法确定导致这个问题的原因。

protected void OnAddEmployee(object sender, EventArgs e)
    {
        if (gridViewPersonal.SelectedDataKey == null)
        {
            return;
        }

        int employeeID = 0;
        foreach (GridViewRow row in gridViewEmployee.Rows)
        {
            if (employeeID < int.Parse(row.Cells[0].ToString()))
            {
                employeeID = int.Parse(row.Cells[0].ToString());
            }
        }
        employeeID++;



                cmd.ExecuteNonQuery();
                con.Close();
            }
        }

2 个答案:

答案 0 :(得分:0)

正如我在评论中提到的,问题在于转化,请查看foreach,您的row.Cells[0].ToString()的值有时为nullempty或其他一些不可转换为有效整数的值,这次您将获得FormatException。还有一件事你做错了,你要解析相同的值两次,以避免这两个错误,你可以使用TryParse,在这种情况下你的代码将是这样的:

int employeeID = 0;
foreach (GridViewRow row in gridViewEmployee.Rows)
{
    if (int.TryParse(row.Cells[0].ToString(), out employeeID))
    {
       break;
    }
}

请注意:我刚刚尝试在该循环中为您提供int.TryParse的示例用法,我没有得到您在这里使用循环尝试的确切过程,In以上示例if将在第一次有效转换执行时中断循环。如果要遍历所有行,可以删除中断。

答案 1 :(得分:0)

当int.parse运行为非数字字符时,会发生该错误。您可以使用try catch块来捕获错误,然后移动到下一行,或者您可以使用int.tryparse在没有try catch的情况下检查它。以下是使用tryparse的代码:

int employeeID = 0;
foreach (GridViewRow row in gridViewEmployee.Rows)
{
    string curStr = row.Cells[0].ToString();
    int curID = 0;
    if (int.TryParse(curStr, curID)){
        if (employeeID < curID)
        {
            employeeID = curID);
        }
    }
}
employeeID++;

在解析它之前,您可能还应该使用调试器逐步执行并将单元格值作为字符串进行观察,这就是我为它创建单独变量的原因。当我终于意识到我一直在从错误的列中提取数据时,我最难打击自己(比喻)。