2017-01-06 36 views
0

当我加入的第一行代码正常工作没有处理,但事后则它抛出我“System.FormatException” mscorlib.dll中发生,但在用户代码中

类型的异常System.FormatException发生在mscorlib.dll,但没有在用户代码中处理

我一直在盯着这段代码很长一段时间,似乎无法找到可能导致此问题的问题。

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(); 
      } 
     } 
+1

希望异常抛出此行:'int.Parse(row.Cells [0] .ToString()'请使用'TryParse'代替'parse' –

+0

我试过TryParse,它抛出同样的异常 – Nathan

+0

@非幸运的对不起.... – Nathan

回答

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,我没有得到你在这里用循环尝试的确切过程,在上面的例子中,当第一次有效的转换执行时会断开循环。如果要遍历所有行,可以删除中断。

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++; 

你或许应该还使用调试器来逐步和解析它,这就是为什么我做了一个单独的变量,需要先观察细胞的值作为一个字符串。当我终于意识到自己一直在从错误的列中提取数据时,我的头脑最为沉重(象征性地)。

相关问题