将 TimeSpan 绑定到 DateTime 控件 (Entity Framework)

Binding TimeSpan to DateTime control (Entity Framework)

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

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

我有一个 DataGridView,它是 DataBounded 到 entity framework DbSetDbSet 有一个 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);