| 

.NET C# Java Javascript Exception

1
Servus zusammen!

Ich hab ein kleines Problem: ich möchte gerne an ein Datumscontrol einen Nullable(of Date)-Wert binden. Leider schlägt das ohne zutun fehl. Nach nem kurzen Moment im Internet fand ich das so: aber leider gehts auch nicht.... :(

'dateAbgabe ist das Datums-Control'
dateAbgabe.DataBindings.Clear()
dateAbgabe.DataBindings.Add("Value", _aktuellerPS, "Abgabe")

'Das habe ich bereits von dem normalen Control geerbt und die Value-Property überschrieben, aber ich find den Fehler nicht .... :( '

Public Class bnNETDateInputNullAble
Inherits bnNETDateInput

Public Overloads Property Value As Date?
Get
If String.IsNullOrEmpty(MyBase.Text) Then
Return New Date?(Nothing)
Else
Return New Date?(MyBase.Value)
End If
End Get
Set(value As Date?)
If value.HasValue Then
MyBase.Value = value.Value
Else
MyBase.Value = Nothing
End If
End Set
End Property


Habt ihr ne Lösung für mich?
04.08.2011
daWastl 277 1 7
fast vergessen - hier die Fehlermeldung:

Ungültige Umwandlung von "System.DateTime" in "System.Nullable`1[[System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]".
daWastl 04.08.2011
3 Antworten
1
ich gehe mal davon aus, dass Du mit "Datumscontrol" einen DateTimePicker meinst.

Wir hatten das Problem damit auch schon mehrfach. Es insgesamt haben wir dafür zwei Lösungsvarianten gefunden:


  • Drittanbieter (z.B. Infragistics kommt damit klar).
  • Ein Dummy-Datum setzen (z.B. DateTime.MinValue), das Format auf "Custom" und den FormatString z.B. auf ein Leerzeichen setzen (dann ist das Eingabefeld des DateTimePickers leer). Das Format und den formatstring muss man dann natürlich während der laufzeit immer dynamisch umstellen, je nachdem, ob der Dummy-Wert oder ein anderer im Steuerelement enthalten ist.


Vielleicht hilft Dir das ja oder bringt Dich auf weitere Ideen.
05.08.2011
Andreas Ganzer 1,4k 1 8
0
Kann meiner Meinung nach so nicht funktionieren, da Du ja wieder ein NOTHING an die Basisklasse übergeben willst wenn value.HasValue false ist. Und wenn ein Wert enthalten ist gibst Du - wie die Fehlermeldung aussagt - einen Nullable(of Datetime) an einen Datetime Typen.

Versuch mal einen Convert.ToDateTime(value.Value) oder überschreibe besser gleich auch die Klassenvariable

Gruß,
04.08.2011
LutzJ 1,3k 1 8
0
Da die Frage hier nochmal nach oben gespült wurde: der wesentliche (und unverschämt einfache) Trick wird z.B. hier bei stackoverflow verraten: die FormattingEnabled-Eigenschaft des Bindings ist auf true zu setzen. Die ist ab heute für mich ein heißer Kandidat für die am mißverständlichsten benannte Eigenschaft im .NET-Framework, denn sie ist (Zitat MSDN, Hervorhebung von mir)

true, wenn die Typkonvertierung und das Formatieren von Steuerelementeigenschaftendaten aktiviert ist, andernfalls false

Anscheinend ist das so gemeint, dass die Typen von Steuerelement- und Datenquellen-Property exakt übereinstimmen müssen, wenn FormattingEnabled auf false steht, weil nur mit true eine Typkonvertierung stattfindet.

Ansonsten mußt Du noch das Problem lösen, dass der DateTimePicker eigentlich immer einen Wert hat. Das kannst Du so lösen:

  • wenn die Updates immer nur vom Control zur Datenquelle laufen, dann reicht es, irgendeinen passenden Initialwert für das Control zu setzen
  • wenn die Datenquelle auch zwischendurch wieder null werden kann, Du aber einen fachlich vertretbaren Datumswert hast (z.B. das kleinstmögliche Datum oder heute), um das darzustellen, dann kannst Du die NullValue-Eigenschaft des Bindings auf diesen Wert setzen
  • ansonsten gäbe es noch die Möglichkeit, mit der ShowCheckBox-Eigenschaft des DateTimePickers zu arbeiten, was z.B. hier beschrieben wird
  • und schließlich: eigenes UserControl oder ein 3rd-Party-Control, das null in geeigneter Weise visualisieren kann


Eine eigene, von DateTimePicker abgeleite Klasse, wie in deiner Frage dargestellt, brauchst Du also eigentlich nicht (außer evtl. für eine eigene Visualisierung von null).
06.10.2011
Matthias Hlawatsch 13,2k 4 9

Stelle deine .net-Frage jetzt!