将TimeSpan绑定到DateTime控件(实体框架)
本文关键字:实体 框架 控件 DateTime TimeSpan 绑定 | 更新日期: 2023-09-27 18:06:29
我正在使用c# Winform和实体框架,
我的问题是,是否有一种方法来绑定一个TimeSpan属性到DateTime控件?
我有一个DataGridView
,它是一个实体框架DbSet
的DataBounded
。DbSet
具有TimeSpan
属性,我将其绑定到DateTime
控件,但仅显示为Time
。实体框架-(主细节)如何更新从主
在执行程序时,在构建时没有显示错误,但是在控件上没有显示时间,也没有节省时间。(
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);
正如我所预料的,您有DateTimePicker
控件,Format
设置为DateTimePickerFormat.Time
,并且您将TimeSpan
绑定到Value
属性。
但是,Value
属性类型是DateTime
,因此绑定静默失败。
要解决这个问题,绑定到Text
属性。