2016-06-21 6 views
0

Ich habe ein PreviewKeyDown Ereignis in meinem Raster und ich möchte nur numerischen Wert und (0,2) Dezimalwert lassen.DataGridviewCell verhindern nicht numerische Eingabe

private void dgvUser_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 
    { 
     colUser = dgvUser.CurrentCell.ColumnIndex; 
     rowUser = dgvUser.CurrentCell.RowIndex; 
     DataGridViewCell tc = dgvUser[colUser, rowUser]; 

     valueUser = Convert.ToDouble(tc.Value);//code breaks here 


     if (e.KeyData == Keys.Enter && dgvUser.CurrentCell.ColumnIndex == 2 && handledUser == true) 
     { 
      DragerClass.Dedektör.Dedektor_A1Set[Convert.ToInt32(dgvUser.Rows[rowUser].Cells[0].Value) - 1] = valueUser; 
      BindUserGrid(userPagingUpdate[0], userPagingUpdate[1]); 
      logValues(Convert.ToInt32(dgvUser.Rows[rowUser].Cells[0].Value) - 1); 
      handledUser = false; 
     } 
    } 

Wenn ich nicht numerischen Wert Code Pausen in valueUser = Convert.ToDouble(tc.Value); Zeile eingeben. Wie kann ich das verhindern?

+0

Dies könnte ein Duplikat sein: http://stackoverflow.com/questions/14542470/numeric-textbox-in-datagridview-column –

Antwort

0

Entweder können Sie einen Try/Catch-Anweisung verwenden,

try 
    { 
     valueUser = Convert.ToDouble(tc.Value); 
    } 
    catch 
    { 
     // if the above line throws an exception deal with it here. 
    } 

oder könnten Sie verwenden Double.TryParse()

double valueUser; 
bool isNumber = double.TryParse(tc.Value,out valueUser); 
+0

Ich habe versucht Ihren Vorschlag, aber dieses Mal habe ich ein anderes Problem :(In einer falschen Eingabezelle hat 0.0 Wert und ich verliere alten Wert – CanESER

+0

Ich verstehe nicht, verlieren Sie den alten Wert? Speichern Sie es vor der Konvertierung 'var oldValue = tc.Value' und dann folgen Sie ihm mit dem Code, den Sie brauchen? – pijemcolu

1

Sie Double.TryParse Methode verwenden:

if (Double.TryParse(tc.Value.ToString(), out valueUser)) 
{ 
    //success 
} 
else 
{ 
    //fail 
} 
0

Eine andere Lösung wäre, die DataGridViewCell.ValueType, die Sie als Vorlage für Ihre Spalte verwenden, auffestzulegenDadurch wird jedes Mal ein DataError Event erstellt, wenn der Benutzer versucht, einen anderen Wert als den von Ihnen angegebenen einzugeben. Sie können dann das DataError Event nach Belieben handhaben.