2017-07-04 48 views
0

グリッドビューに複数の列が含まれていて、入力の種類をdoubleに調整しました。DataGridViewセルの検証と選択方法

ユーザーがセルを選択してデータを入力すると、タイプがdoubleと一致するかどうかをチェックしたいと思います。

ユーザーが別のセルをクリックして、放置しようとしているセルが一致せず、解析に失敗した場合は、失敗したセルにフォーカスを戻し、選択したセルにフォーカスを戻して、有効なデータを入力してから、セルの残りの部分を充填し続けます。

問題は、常に失敗したセルから離れることです。私がバリデーションやバリデーションのような他の機能を使用したとしても。

private void dataGridView1_CellLeave(object sender, DataGridViewCellEventArgs e) 
     { 

      var selectedCell = dataGridView1.SelectedCells[0]; 
      if (selectedCell.OwningColumn.ValueType == typeof(double)) 
      { 
       try 
       { 
        double result = Convert.ToDouble(selectedCell.EditedFormattedValue.ToString()); 
        if (result <= 0) 
        { 
         MessageBox.Show("Please Positive Numbers Only"); 
         dataGridView1.Focus(); 
         dataGridView1.CurrentCell = dataGridView1.Rows[selectedCell.RowIndex].Cells[selectedCell.ColumnIndex]; 
         dataGridView1.BeginEdit(true); 
        } 
        else 
        { 
         dataGridView1.CurrentCell.Value = result; 
        } 
       } 
       catch 
       { 
        MessageBox.Show("Please Enter Numbers Only"); 
       } 
      } 
     } 

答えて

1

あなたがイベントDataGridView.CellValidatingを使用することができます。

は、ここに私のコードサンプルです。これはあなたの問題を解決するはずです。

例:

private void dataGridView1_CellValidating(object sender, 
              DataGridViewCellValidatingEventArgs e) 
    { 
     if (e.ColumnIndex == 1) // 1 should be your column index 
     { 
      int i; 

      if (!int.TryParse(Convert.ToString(e.FormattedValue), out i)) 
      { 
       e.Cancel = true; 
       label1.Text ="please enter numeric"; 
      } 
      else 
      { 
       // the input is numeric 
      } 
     } 
    } 

DataGridView.CellValidating Event

How to: Validate Data in the Windows Forms DataGridView Control

CellValueChanged vs CellValidating Events for DataGridView

+0

あなたはそれを試してみて、それが動作しましたか?私はそれを試して、それが私のために働かなかったので、サンプルコードを私に提供してください。 –

+0

はい、それは魅力のように働いています。 Dgv "CellValidating"は、実際のセルから離れる(または他のセルをクリックするか、Enterキーを押す)ときに上がります。 – krzysztofla

+0

ありがとう!私は、CellValidatingを使用したときに、この行 'e.Cancel = true; 'を追加するだけでした。今は完璧に動作します。 –

関連する問題