Просто наткнулся на ваш пост.
Я не уверен, было ли это FormatException, но я получил исключение и с датой DateTimePicker с привязкой к данным.
Проблема в том, что
DateTimePicker.MinimumDateTime = #1/1/1753#
пока
DateTime.MinValue = #1/1/0001#
New DateTime = #1/1#0001#
Таким образом, если привязать свойство к DataGridView, которое возвращает значение DateTime ранее, чем # 1/1/1753 # или позже, то # 12/31/9998 # (DateTimePicker.MaximumDateTime), вы получите исключение.
Я решил эту проблему с помощью своего собственного унаследованного DateTimePicker (извините, но он написан на vb)
Чтобы использовать его, вы можете просто связать свой Subsonic объект со свойством value. Но вы должны установить для свойства ShowCheckBox значение true и связать значение bool со свойством CheckedValue (чтобы указать, что дата установлена), которое также сохраняется в вашей БД.
Сейчас. Если возвращается пустая дата, для даты устанавливается значение «Сейчас», а для параметра selectedValue - значение «false», что приводит к отключению функции DateTimePicker.
Если вы установите флажок или выберите дату с календарем), флажок будет установлен в значение true, а флажок установлен.
Внимание: не привязывайте свойство Checked напрямую, а привязывайте свойство CheckedValue.
Imports System.ComponentModel
Public Class MyDateTimePicker
Inherits System.Windows.Forms.DateTimePicker
<Bindable(True)> _
Public Overloads Property Value() As DateTime
Get
If Not MyBase.Checked And (MyBase.Value < DateTimePicker.MinimumDateTime Or MyBase.Value > DateTimePicker.MaximumDateTime) Then
Return DateTime.Now
Else
Return MyBase.Value
End If
End Get
Set(ByVal value As DateTime)
If ((value < DateTimePicker.MinimumDateTime Or value > DateTimePicker.MaximumDateTime) Or value = #1/1/1900#) Then
MyBase.Value = DateTime.Now
MyBase.Checked = False
Else
MyBase.Value = value
End If
End Set
End Property
Private _CheckedValue As Boolean
<Bindable(True)> _
Public Property CheckedValue() As Boolean
Get
Return _CheckedValue
End Get
Set(ByVal value As Boolean)
_CheckedValue = value
End Set
End Property
Protected Overrides Sub OnMouseUp(ByVal e As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseUp(e)
RefreshCheckedValue()
End Sub
Protected Overrides Sub OnKeyUp(ByVal e As System.Windows.Forms.KeyEventArgs)
MyBase.OnKeyDown(e)
RefreshCheckedValue()
End Sub
Private Sub RefreshCheckedValue()
CheckedValue = Me.Checked
If Not Me.DataBindings("CheckedValue") Is Nothing Then
Me.DataBindings("CheckedValue").WriteValue()
End If
End Sub
Protected Overrides Sub OnBindingContextChanged(ByVal e As System.EventArgs)
MyBase.OnBindingContextChanged(e)
Static checkedInitialized As Boolean
If Not checkedInitialized AndAlso Not Me.DataBindings("CheckedValue") Is Nothing Then
Me.Checked = Me.CheckedValue
checkedInitialized = True
End If
End Sub
End Class