我正在使用C#Winform和Entity Framework,
我的问题是,有没有办法将TimeSpan属性绑定到DateTime控件?
我有DataGridView
DataBounded
到实体框架DbSet
。 DbSet
有一个TimeSpan
属性,我绑定到DateTime
控件但仅显示为Time
。我的Binding建模在这里:Entity Framework - (master detail) how to update Details which on a separate form from Master
执行程序时,构建中没有显示错误,但控件上没有显示时间以及保存,也没有保存时间。 :(
答案 0 :(得分:2)
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);
答案 1 :(得分:1)
正如我不希望的那样,DateTimePicker
Format
设置为DateTimePickerFormat.Time
并TimeSpan
将Value
绑定到Value
属性。
但是,DateTime
属性类型为class SetA {
constructor(public items:any[]) {
}
createNew(items){
return new *typeof this*(items); //<-- insert actually working magic here
}
clone(){
return this.createNew(this.items);
}
}
class SetB extends SetA { }
var x = new SetB([1,2,3]);
x.clone(); //<-- returns a new SetB
,因此无提示绑定失败。
要解决此问题,请改为绑定到Text
属性。