我正在创建一个用于记录员工时间的应用程序。 所有用户的所有时间数据都将以 UTC 格式存储在 SQL 数据库中。 前端将是一个 Windows 窗体应用,它显示时间并接受用户本地时区的输入。 WinForms 应用有一个DataGridView
控件,用户可以在其中显示和输入时间。
DataGridView
绑定到TimeSegment
对象的List
。 TimeSegment
是我创建的结构,基本上是这样的:
struct TimeSegment
{
private DateTime start, end;
public TimeSegment(DateTime start, DateTime end){
Start = start;
End = end;
}
public DateTime Start
{
get { return start; }
set {
if (value.Kind != DateTimeKind.Utc)
throw new ArgumentException("Only UTC dates are allowed.");
start = value;
}
}
//There is an End property which is just like the Start
//property, but for the 'end' field.
}
因此,在DataGridView
中,将有一列开始时间和一列结束时间,每行代表用户执行的一些事件或任务。
我知道如何使用 DataGridView.CellFormatting
事件将内部 UTC 时间转换为本地时区以进行显示。我遇到的问题是在本地时间获取用户输入并在将更新发送到DataGridView
DataSource
之前转换为 UTC。
我已经看过其他几篇帖子,展示了如何在DataGridView
的CellParsing
或CellValidating
事件上更改单元格中的文本,但我需要更改文本被解析为的实际对象,该对象被发送到DataSource
。
有没有办法覆盖单元格的分析行为并指定应将哪个对象发送到数据源?
你可以尝试这样的事情:
private void mainGrid_CellValidated(object sender, DataGridViewCellEventArgs e)
{
//Convert time
(mainGrid.Rows[e.RowIndex].DataBoundItem as TimeSegment).Start = convertedValue;
}