C#/WinForms
응용 프로그램에 DataGridView
이 있습니다.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
이벤트가 발생하지 않는 경우. DateTime
의 형식이 잘못된 DataGridView Exception
입니다.
이 오류가 발생하지 않도록하려면 어떻게 날짜를 자동으로 포맷 할 수 있습니까?
그것은 말 :
덕분에 많이 "문자열이 유효한 날짜 시간으로 인식되지 않습니다", 나 자신을 수정 Nixeus
질문에 대한 대답은 아니지만 왜 ' ] .Value' 대신'dataGridView_BadgeService.Rows [e.RowIndex] .Cells [e.ColumnIndex] .Value'? –
왜 그런지 모르겠습니다. –
재사용 가능한 DataGridViewDateTimePicker 컨트롤을 만드는 데 시간을 투자하는 것이 좋습니다. http://msdn.microsoft.com/en-us/library/7tas5c80.aspx – tezzo