2009-06-15 13 views
1

私はC#winformsアプリケーションでMS ACCESSをバックエンドとして使用しています。 datagridviewでは、私は "startTime"という列を持っています。セルの値を検証して編集する方法

私の必要条件は、開始時間を検証し、必要に応じてプログラムで値を編集して保存することです。

例えば、ユーザが「午前8:00」ではなく「8.00AM」を入力した場合、私のプログラムは「無効なデータ型」というエラーを投げてはなりません(データベース "StartTime"はdatetime型のフィールドです)。むしろ私のプログラムは午前8時から午前8時に変更し、午前8時にバックエンドに送るべきです。下に貼り付けた はコードです。任意の提案pls。

private void dgvSession_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 
    { 
     //** Validation for StartTime 
     if (e.ColumnIndex == this.dgvSession.Columns["StartTime"].Index) 
     { 

     string time = e.FormattedValue.ToString().Trim(); 
     strtDt = e.FormattedValue.ToString().Trim(); 
     if (!ValidateTime(time)) 
     { 
      //MessageBox.Show("Entered time is not in a correct format.); 

      e.Cancel = true; 
      return; 
     } 
    } 
} 

public bool ValidateTime(string thetime) 
{ 
    Regex checktime = new Regex(@"(^([0-9]|[0-1][0-9]|[2][0-3])[.:]([0-5][0-9])(\s{0,1})(AM|PM|am|pm|aM|Am|pM|Pm{2,2})$)|(^([0-9]|[1][0-9]|[2][0-3])(\s{0,1})(AM|PM|am|pm|aM|Am|pM|Pm{2,2})$)"); 

    return checktime.IsMatch(thetime); 
} 

答えて

3

正直言って私の提案は、セルをComboBoxセルに変更し、すべての時間をあらかじめ入力しておくことです。ユーザが何かを入力するのではなく、ユーザが入力できるものを制限し、後でそれを頭や尾にすることは、常に簡単です。

ラフコード:

 DataGridViewComboBoxColumn timeColumn = new DataGridViewComboBoxColumn(); 
     timeColumn.DisplayMember = "TimeOfDay"; 
     DateTime startTime = DateTime.Today; 
     for (int i = 0; i <= 23; i++) 
     { 
      for (int j = 0; j <= 60; j += 15) 
      { 
       timeColumn.Items.Add(startTime.AddHours(i).AddMinutes(j)); 
      } 
     } 

     this.dataGridView1.Columns.Add(timeColumn); 

これは、15分刻みを行いますあなたはそれが他の方法を分解したい場合は、あなただけの内側のループを変更することができます...

0

あなたがどうかを判断する必要があるだろうエントリが有効であるかどうかを確認し、新しい機能を作成したり、エントリを有効な日時に変更する方法を作成したりしません。ユーザーが難しいかもしれないいくつかの狂ったことを入力できるように見える。

あなたがこれを行う場合は、簡単に有効なエントリに、そのセルの値を設定することができます。

dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = YourNewDateValue;