I have a `DataGridView` in a `C#/WinForms` application.
I would like to input a date into a cell.
If the user input `01/01/2012`, it's ok, but if `01012012` is input, I have an Exception.
I'm able to verify the input using the `CellValidating` event.
Nevertheless, I would like to auto-format if the user inputs a date like `01012012`, and apparently, I need to do this in the CellValidated event.
Here is my code:
private void dataGridView_BadgeService_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { if (dataGridView_BadgeService.Columns[e.ColumnIndex].Name == "DateDebut" || dataGridView_BadgeService.Columns[e.ColumnIndex].Name == "DateFin") { String date = Convert.ToString(e.FormattedValue).Trim(); if (date.Length > 0) { try { DateTime _date; if (DateTime.TryParse(date, out _date) == false) { if (DateTime.TryParseExact(date, "ddMMyyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out _date) == false) { MessageBox.Show("Merci de saisir une date, ou laissez cette zone vierge", "Action-Informatique", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); e.Cancel = true; } } } catch { MessageBox.Show("Merci de saisir une date, ou laissez cette zone vierge", "Action-Informatique", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); e.Cancel = true; } } } } private void dataGridView_BadgeService_CellValidated(object sender, DataGridViewCellEventArgs e) { if (dataGridView_BadgeService.Columns[e.ColumnIndex].Name == "DateDebut" || dataGridView_BadgeService.Columns[e.ColumnIndex].Name == "DateFin") { String date = Convert.ToString(dataGridView_BadgeService.Rows[e.RowIndex].Cells[e.ColumnIndex].Value).Trim(); if (date.Length > 0) { try { DateTime _date; if (DateTime.TryParse(date, out _date) == true) { dataGridView_BadgeService.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = _date.ToShortDateString(); } else { if (DateTime.TryParseExact(date, "ddMMyyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out _date) == true) { dataGridView_BadgeService.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = _date.ToShortDateString(); } } } catch { MessageBox.Show("Merci de saisir une date, ou laissez cette zone vierge", "Action-Informatique", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } }
I don't know why, but if I input `01012012`, the `CellValidated` event does not fire. I have a `DataGridView Exception` about a bad format for the `DateTime`.
How can I auto-format my date in order to avoid this error?
Thanks a lot,
Nixeus