将 TimeSpan 绑定到 DateTime 控件 (Entity Framework)
Binding TimeSpan to DateTime control (Entity Framework)
我正在使用 C# Winform 和 Entity Framework,
我的问题是,有没有办法将 TimeSpan 属性 绑定到 DateTime 控件?
我有一个 DataGridView
,它是 DataBounded
到 entity framework DbSet
。 DbSet
有一个 TimeSpan
属性,我将其绑定到 DateTime
控件,但仅显示为 Time
。我的绑定在这里建模:
程序执行后,构建时没有显示错误,但控件上没有显示时间,也没有保存时间,也没有保存时间。 :(
正如我所理解的,你有 DateTimePicker
控制 Format
设置为 DateTimePickerFormat.Time
并且你将 TimeSpan
绑定到 Value
属性.
然而,Value
属性 类型是 DateTime
,因此绑定失败。
要解决此问题,请改为绑定到 Text
属性。
TimeSpan 和 DateTime 不可互换。我相信最简单的解决方案是创建一个派生自 DateTimePicker
的控件,它公开一个 TimeSpan
属性 并绑定到它。
public class TimePicker : DateTimePicker, System.ComponentModel.INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public TimePicker()
: base()
{
this.Format = DateTimePickerFormat.Time;
}
public TimeSpan Time
{
get
{
return this.Value.TimeOfDay;
}
set
{
this.Value = DateTime.Today.Add(value);
}
}
protected override void OnValueChanged(EventArgs eventargs)
{
base.OnValueChanged(eventargs);
if (PropertyChanged != null)
PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs("Time"));
}
}
然后你可以像这样绑定它:
timePicker1.DataBindings.Add("Time", bindingSource1, "TS", true, DataSourceUpdateMode.OnPropertyChanged);
我正在使用 C# Winform 和 Entity Framework,
我的问题是,有没有办法将 TimeSpan 属性 绑定到 DateTime 控件?
我有一个 DataGridView
,它是 DataBounded
到 entity framework DbSet
。 DbSet
有一个 TimeSpan
属性,我将其绑定到 DateTime
控件,但仅显示为 Time
。我的绑定在这里建模:
程序执行后,构建时没有显示错误,但控件上没有显示时间,也没有保存时间,也没有保存时间。 :(
正如我所理解的,你有 DateTimePicker
控制 Format
设置为 DateTimePickerFormat.Time
并且你将 TimeSpan
绑定到 Value
属性.
然而,Value
属性 类型是 DateTime
,因此绑定失败。
要解决此问题,请改为绑定到 Text
属性。
TimeSpan 和 DateTime 不可互换。我相信最简单的解决方案是创建一个派生自 DateTimePicker
的控件,它公开一个 TimeSpan
属性 并绑定到它。
public class TimePicker : DateTimePicker, System.ComponentModel.INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public TimePicker()
: base()
{
this.Format = DateTimePickerFormat.Time;
}
public TimeSpan Time
{
get
{
return this.Value.TimeOfDay;
}
set
{
this.Value = DateTime.Today.Add(value);
}
}
protected override void OnValueChanged(EventArgs eventargs)
{
base.OnValueChanged(eventargs);
if (PropertyChanged != null)
PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs("Time"));
}
}
然后你可以像这样绑定它:
timePicker1.DataBindings.Add("Time", bindingSource1, "TS", true, DataSourceUpdateMode.OnPropertyChanged);