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

本文关键字:实体 框架 控件 DateTime TimeSpan 绑定 | 更新日期: 2023-09-27 18:06:29

我正在使用c# Winform和实体框架,

我的问题是,是否有一种方法来绑定一个TimeSpan属性到DateTime控件?

我有一个DataGridView,它是一个实体框架DbSetDataBoundedDbSet具有TimeSpan属性,我将其绑定到DateTime控件,但仅显示为Time。实体框架-(主细节)如何更新从主

单独的表单上的细节

在执行程序时,在构建时没有显示错误,但是在控件上没有显示时间,也没有节省时间。(

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

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属性。