1
我在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
不會觸發事件。我有一個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