어제 날짜 열과 동일한 문제가 있습니다.
CellFormatting 및 CellParsing 이벤트를 발견했지만 BindingSource가이를 무시한 것 같습니다. 그래서 나는 이것을 좋아했다. 나는 세포를 사용했다. Tag 속성. 여기서 dgv는 DataGridView입니다.
private void dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (IsBirthdayColumn(e.ColumnIndex))
{
e.Value = dgv[e.ColumnIndex, e.RowIndex].Tag;
if (e.Value is DateTime)
{
e.Value = ((DateTime)e.Value).ToShortDateString();
}
e.FormattingApplied = true;
}
}
private void dgv_CellParsing(object sender, DataGridViewCellParsingEventArgs e)
{
DateTime date;
if (IsBirthdayColumn(e.ColumnIndex))
{
if (e.Value != null && DateTime.TryParse(e.Value.ToString(), out date))
{
e.Value = date;
dgv[e.ColumnIndex, e.RowIndex].Tag = e.Value;
}
else
{
dgv[e.ColumnIndex, e.RowIndex].Tag = e.Value;
e.Value = DBNull.Value;
}
e.ParsingApplied = true;
}
}
private void dgv_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
DateTime date;
if (IsBirthdayColumn(e.ColumnIndex))
{
var cell = dgv[e.ColumnIndex, e.RowIndex];
if (e.FormattedValue != null && !DateTime.TryParse(e.FormattedValue.ToString(), out date))
{
if (e.FormattedValue.ToString().Trim().Equals(""))
{
cell.ErrorText = string.Empty;
return;
}
cell.ErrorText = "Invalid date format";
}
else
{
cell.ErrorText = string.Empty;
}
}
}
또한 유
private void dgv_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
......
e.Cancel = false;
......
}
지금 u는 날짜 열에서 아무것도 쓸 수 DataError 이벤트를 처리 할 필요가있다. 유효하지 않은 날짜의 경우에는 u 오류 아이콘을 표시하고 DBNull을 DataSet에 저장합니다. 빈 문자열의 경우 DBNull 만 저장합니다.
질문 부분에 "유효하지 않은 값을 입력하고 마지막으로 올바른 값을 입력하십시오." 누군가 이름을 변경 한 다음 나이를 변경하면 이름 변경을 저장 하시겠습니까? –
아니요. DB를 일관성있게 유지하기 위해 올바른 정보 만 유지하려고합니다. –