将TimeSpan绑定到DateTime控件(实体框架)

时间:2016-09-11 16:05:18

标签: c# winforms entity-framework datetime timespan

我正在使用C#Winform和Entity Framework,

我的问题是,有没有办法将TimeSpan属性绑定到DateTime控件?

我有DataGridView DataBounded到实体框架DbSetDbSet有一个TimeSpan属性,我绑定到DateTime控件但仅显示为Time。我的Binding建模在这里:Entity Framework - (master detail) how to update Details which on a separate form from Master

执行程序时,构建中没有显示错误,但控件上没有显示时间以及保存,也没有保存时​​间。 :(

2 个答案:

答案 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.TimeTimeSpanValue绑定到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属性。