2009-06-15 23 views
1

我正在使用MS ACCESS作爲後端的C#winforms應用程序。在datagridview中,我有一列「startTime」。如何驗證和編輯單元格值

我的要求是我想驗證startime,如果需要編輯值編輯並保存它。

如果用戶輸入「8.00 AM」而不是「8:00 AM」,我的程序不應該拋出一個錯誤說「無效的數據類型」(在數據庫中的「StartTime」是一個datetime類型的字段)。相反,我的程序應該從早上8點改變爲上午8點,並且應該在上午8點發送給後端。下面粘貼的是 是代碼。任何建議請。

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; 
相關問題