DateTimePicker有趣的问题

时间:2011-12-07 07:58:51

标签: c# winforms datetimepicker

我对DateTimePicker有一些有趣的(?!?)问题,希望有人可以帮助我。我有一个带有DateTimePicker的表单,我想将它绑定到自定义类的属性。 DateTimePicker的自定义格式设置为dd.MM.yyyy HH:mm:ss。这是我尝试过的以及那些尝试的麻烦:

  • 我对DateTimePicker的 Value 属性进行了绑定。我的自定义类的属性包含有效日期。当我运行应用程序时,我得到一个ArgumentOutOfRangeException,指出“01.01.0001 00:00:00”不是值的有效值,它应该在MinDate和MaxDate之间。 (但我不能将DateTime.MaxValue和DateTime.MinValue都设置为value属性!
  • 我对DateTimePicker的 Text 属性进行了绑定。一切运行良好,秒始终显示为“00”。我可以输入不同的值,它们会反映到我的自定义类的绑定属性中!

有什么想法吗?

修改 以下是设计器文件中的代码段:

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; 
}

2 个答案:

答案 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控件的可接受范围。