2016-06-21 8 views
0

私はグリッドにPreviewKeyDownイベントがあり、数値と(0,2)の10進値だけを入力します。DataGridviewCellは非数値入力を防止します

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

私はvalueUser = Convert.ToDouble(tc.Value);ラインに非数値コードブレークを入力してください。どうすればそれを防ぐことができますか?

+0

これは重複している可能性があります:http://stackoverflow.com/questions/14542470/numeric-textbox-in-datagridview-column –

答えて

0

どちらかあなたはのtry/catchステートメントを使用することができ、

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

またはあなたがDouble.TryParseメソッドを使用することができます

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

私は提案を試みましたが、その時私は別の問題があります:(間違った入力セル私は古い値を失うのですか? – CanESER

+0

あなたは古い値を失いましたか?変換前に 'var oldValue = tc.Value'を保存して、必要なコードを続けますか? – pijemcolu

1

double.TryParse()を使用することができます:

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

をもう1つの解決策は、あなたの列のテンプレートとして使用するDataGridViewCell.ValueTypeをに設定することですこれは、ユーザーが指定した値と異なる値を入力しようとするたびにDataError Eventを作成します。それで、あなたが好きなものにそのDataError Eventを扱うことができます。

関連する問題