SubSonic и элемент управления dateTimePicker в форме Windows - PullRequest
0 голосов
/ 26 мая 2009

Вопрос № 1: последняя рабочая версия

В настоящее время я использую SubSonic 2.1, встроенный 491. Есть ли более поздняя сборка? Где я могу получить это? Я знаю, что 2.2 был выпущен, но он не поставляется с программой установки, и я не знаю, как изменить App.Config / Web.Config для работы с ним.

Вопрос № 2: проблема с элементом управления dateTimePicker в форме Windows.

Я продолжаю получать System.FormatException попытки извлечь данные из SubSonic в этот элемент управления или сохранить данные из этого элемента управления в базу данных через SubSonic.

Например, если я хочу сохранить только время, я могу использовать свойство .Text. Чтобы сохранить дату, мне нужно использовать свойство .Value элемента управления.

Я пробовал все виды преобразования, такие как Convert.ToDateTime(dateTimePicker.Value.ToString()) и другие, но я не могу найти последовательный шаблон, который бы не вызывал исключение. Любая помощь по этому вопросу будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 09 июня 2009

Просто наткнулся на ваш пост. Я не уверен, было ли это 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
0 голосов
/ 26 мая 2009

Re Вопрос 1 - Я не думаю, что требуется изменение app.config / web.config между SS2.1 и 2.2

По Вопросу 2 - вы случайно используете новые типы данных в MSSQL2008? Если так, то SS2.2, похоже, еще не справляется с ними должным образом.

...