У меня есть DataGridView
в приложении C#/WinForms
.Как форматировать данные в dataGridView
Я хотел бы ввести дату в ячейку.
Если пользователь вводит 01/01/2012
, это нормально, но если вводится 01012012
, у меня есть Исключение.
Я могу проверить вход с помощью события CellValidating
.
Тем не менее, я хотел бы автоотформатировать, если пользователь вводит дату, например 01012012
, и, по-видимому, мне нужно сделать это в событии CellValidated.
Вот мой код:
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);
}
}
}
}
Я не знаю, почему, но если я вход 01012012
, то CellValidated
событие не срабатывает. У меня есть DataGridView Exception
о плохом формате для DateTime
.
Как я могу автоотформатировать мою дату, чтобы избежать этой ошибки?
Он сказал: "Строка не признается действительным DateTime"
Спасибо большое, Nixeus
это не ответ на ваш вопрос, но почему бы вам не использовать 'dataGridView_BadgeService [e.RowIndex, e.ColumnIndex ] .Value' вместо 'dataGridView_BadgeService.Rows [e.RowIndex] .Cells [e.ColumnIndex] .Value'? –
Я не знаю почему :) –
Я рекомендую вам потратить некоторое время на создание многократно используемого элемента управления DataGridViewDateTimePicker: http://msdn.microsoft.com/en-us/library/7tas5c80.aspx – tezzo