我对DateTimePicker有一些有趣的(?!?)问题,希望有人可以帮助我。我有一个带有DateTimePicker的表单,我想将它绑定到自定义类的属性。 DateTimePicker的自定义格式设置为dd.MM.yyyy HH:mm:ss
。这是我尝试过的以及那些尝试的麻烦:
有什么想法吗?
修改 以下是设计器文件中的代码段:
this.dateTimePickerTimestampFrom.CustomFormat = "dd.MM.yyyy HH:mm:ss";
this.dateTimePickerTimestampFrom.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.bindingSourceSelectLogEntries, "DateFrom", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.dateTimePickerTimestampFrom.Enabled = false;
this.dateTimePickerTimestampFrom.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
this.dateTimePickerTimestampFrom.Location = new System.Drawing.Point(81, 42);
this.dateTimePickerTimestampFrom.Name = "dateTimePickerTimestampFrom";
this.dateTimePickerTimestampFrom.Size = new System.Drawing.Size(147, 20);
this.dateTimePickerTimestampFrom.TabIndex = 3;
编辑2 bindingsource是一个包含几个属性的自定义类。这些值在设置绑定时有效。我在下面的代码中设置它:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
// Exception is thrown at the following line.
// controller is an instance of my custom class containing valid values.
bindingSourceSelectLogEntries.DataSource = controller;
}
答案 0 :(得分:1)
我自己发现了这个解决方案,我想说,所以其他人可能不会像我一样花太多时间在同一个问题上。
我的设计包含一个表单和一个控制器(包含要呈现的数据)。在表单中,我想在设计器中完成所有操作,以最大限度地减少后面的代码。所以我在表单上有一个绑定源,我的控制器实例是DataSource。 ReflectorPro帮助我找出了CurrencyManager,因为BindingSource被视为列表。因此,在从控制器获取值之前,所有绑定控件的所有值都设置为null。 DateTimePicker不喜欢null作为其Value属性的值并抛出异常。
现在我在代码后面手动完成了绑定,一切都按预期工作。
答案 1 :(得分:1)
只是一个FYI NULL
在这里不是一个问题,就像代表NULL的值一样。
框架中的默认值与许多(包括我自己)在大多数时间内都会错过。
直到最近,在某些情况下甚至现在,在MSSQL和大多数其他数据库中,DateTime字段中NULL值的默认表示形式是"1900-01-01"
的日期值。
现在它已更改为"01/01/0001"
后来也是MS visual studio框架中DateTime.MinValue
的价值。
但是,datePicker
控件无法将此值识别为有效日期,因为VS中的标准DatePicker
控件具有minDate = '01/01/1758'
。
并且存在触发上述错误情况的问题。
您从数据库中获得了一个完全有效的NULL
字段表示,该表示超出了DatePicker
控件的可接受范围。