2017-01-06 9 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()' 'parse'の代わりに' TryParse'を使用してください。 –

+0

TryParseを試してみました。同じ例外を投げかけました – Nathan

+0

@ un-lucky申し訳ありません.... – Nathan

答えて

0

私はコメントで述べたように、問題は、変換であり、foreachに見てそこには、row.Cells[0].ToString()nullで時々、emptyかないいくつかの他の値の値を取得しているしてください有効な整数に変換可能ですが、今度はあなたが今度はFormatExceptionになるでしょう。あなたは間違ってやっているもう一つは、あなたがあなたのコードは次のようになります。この場合には、TryParseを使用することができ、これらのミスの両方を避けるために、同じ値を2回解析している。

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キャッチなしでチェックすることができます。ここで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++; 

あなたはおそらく、私はそれのために別の変数を作った理由である、ステップスルーし、それを解析する前に文字列としてセルの値を観察するためにデバッガを使用する必要があります。私は最終的に私が間違った列からデータを引き出していることに気付くと、頭の中で最も難しい(比喩的に)自分自身を打つ。

関連する問題