2009-05-26 3 views
0

Frage 1: Die neueste Version ArbeitsSubSonic und ein Datetimepicker-Steuerelement auf einer Windows Form

Ich bin derzeit SubSonic 2.1 gebaut 491. mit Gibt es einen späteren Build? Wo kann ich das bekommen? Ich weiß, dass 2.2 veröffentlicht wurde, aber es kommt nicht mit einem Setup, und ich würde nicht wissen, wie die App.Config/Web.Config geändert wird, um damit zu arbeiten.

Frage # 2: Problem mit dem Steuerelement dateTimePicker auf Windows Form.

Ich bekomme immer System.FormatException versucht, Daten von SubSonic zu diesem Steuerelement oder Speichern von Daten aus dieser Kontrolle in die Datenbank durch SubSonic abrufen.

Zum Beispiel, wenn ich nur die Zeit speichern möchte, kann ich die .Text -Eigenschaft verwenden. Um das Datum zu speichern, muss ich die Eigenschaft .Value des Steuerelements verwenden.

Ich habe alle Arten der Umwandlung wie Convert.ToDateTime(dateTimePicker.Value.ToString()) und andere versucht, aber ich kann ein beständiges Muster nicht finden, das keine Ausnahme wirft. Jede Hilfe dazu wäre sehr willkommen.

+0

Hallo, bitte bearbeiten Sie das Thema Ihrer Frage und machen Sie es genauer. – Rahul

Antwort

0

Zu Frage 1 - Ich glaube nicht, dass app.config/web.config Wechsel zwischen SS2.1 und 2,2

Für Frage 2 erforderlich ist - werden Sie die neuen Datentypen in MSSQL2008 mit durch Zufall ? Wenn dem so ist, scheint SS2.2 noch nicht richtig mit ihnen umzugehen.

0

Gerade ist auf Ihren Beitrag gestoßen. Ich bin mir nicht sicher, ob es eine FormatException war, aber ich habe auch eine Exception mit einem datengebundenen DateTimePicker bekommen.

Das Problem ist, dass

DateTimePicker.MinimumDateTime = #1/1/1753# 

während

DateTime.MinValue = #1/1/0001# 
New DateTime = #1/1#0001# 

Also, wenn eine Immobilie an einen Datagridview binden, die einen Datetime-Wert zurückgibt früher als # 1/1/1753 # oder später dann 12 #/31/9998 # (DateTimePicker.MaximumDateTime) erhalten Sie eine Ausnahme.

Ich löste dies mit meinem eigenen geerbt Datetime (sorry, aber es ist in vb geschrieben)

es nutzen zu können, können Sie einfach Ihr Subsonic Objekt auf den Wert Eigenschaft binden. Sie müssen jedoch die ShowCheckBox-Eigenschaft auf true setzen und einen bool-Wert an die CheckedValue-Eigenschaft binden (um anzugeben, dass das Datum festgelegt wurde), das auch in Ihrer db beibehalten wird.

Jetzt Wenn ein leeres Datum zurückgegeben wird, wird das Datum auf Now und der checkedValue auf false gesetzt, was zu einem deaktivierten DateTimePicker führt. Wenn Sie das Kontrollkästchen aktivieren oder ein Datum mit dem Kalender auswählen, wird das Kontrollkästchen auf "true" gesetzt und das Kontrollkästchen aktiviert.

Achtung: Binden Sie die Checked-Eigenschaft nicht direkt, binden Sie die CheckedValue-Eigenschaft.

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