gebundener DateTimePicker zeigt nicht immer das Datum an

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von HerrFrie.

    gebundener DateTimePicker zeigt nicht immer das Datum an

    Hallo Leute,

    in der SuFu bin ich leider nicht erfolgreich fündig geworden. Ich hoffe ihr könnt mir helfen.

    In einer *.mdb Datenbank habe ich eine Spalte 'Geburtsdatum' mit einem Datum. Die Spalte wurde unter Access als Datum/Zeit formatiert.
    Ich lese alle Daten in ein DataGridView ein und lasse z.B. das 'Geburtsdatum' in einem DateTimePicker anzeigen. Der DTP ist an die ausgewählte Zeile gebunden.

    Mein Problem ist jetzt, dass ein eingetragenes Datum mal angezeigt wird und mal nicht. Auch bei Zeilen wo es schon mal angezeigt wurde wird es irgendwann auch einmal nicht angezeigt.
    ShowCheckBox steht auf True.
    Hat vielleicht jemand eine Idee woran das liegen könnte ?

    Hier einmal das, womit ich den DTP binde.

    VB.NET-Quellcode

    1. Dialog1.DateTimePicker1.Format = DateTimePickerFormat.Custom
    2. Dialog1.DateTimePicker1.CustomFormat = " ddd dd.MM.yyyy"
    3. Dialog1.DateTimePicker1.DataBindings.Add("Text", Mitgliederliste_BindingSource, "Geburtsdatum")
    4. 'Dialog1.DateTimePicker1.DataBindings.Add("Value", Mitgliederliste_BindingSource, "Geburtsdatum")

    Wenn ich anstelle von "Text" "Value" eingebe bekomme ich eine Fehlermeldung.


    NACHTRAG :
    Ich habe zum Versuch eine Textbox neben den DTP gelegt und diese genau wie den DateTimePicker gebunden.
    Während der DTP grau im unchecked da stand, wurde mir in der Textbox das korrekte Datum als String angezeigt "13.05.1974 00:00:00"

    2 zusätzliche Textboxen wurden erstellt.
    1. DateTimePicker.Value
    2
    . DateTimePicker.Text

    Im Value wird das Datum immer korrekt angezeigt, im Text steht nichts, das aktuelle Datum oder das Datum von der letzten Selektion.

    Die Bindings werden beim Öffnen des Programms, direkt nach dem Einlesen der Daten durchlaufen.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „HerrFrie“ ()

    Hmm,

    es scheint so zu sein, dass sich die Option von DateTimePicker.Checked = True auf False setzt wenn kein Datum in der Spalte steht.
    Ist ja auch logisch, so hab ich es auch verstanden.

    Wenn ich dann aber eine Zeile auswähle, wo in dieser Spalte ein Datum steht, setzt sich die Option nicht mehr automatisch auf True zurück.
    Ist das vielleicht noch irgendwo eine Einstellungssache ?

    Momentan funktioniert es, wenn ich beim Schließen meines Detailsform alle DateTimePicker von Hand auf .Checked= True zurück setze.

    Ist doch komisch oder ?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „HerrFrie“ ()

    Schauen wir uns mal den Syntax des Databindings an:
    Dim instance As New DataBinding(propertyName, propertyType, expression)
    propertyName ist die Eigenschaft des Zielobjektes, das den Wert enthält. Beim Date-Time-Picker Value nicht Text
    propertyType gibt die Datenherkunft an, wie in Deinem Beispiel die Bindingsource
    expression gibt das Feld an, das aus der Datenquelle genutzt werden soll
    Fazit: Lösche Zeile 3 und nutze Zeile 5
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Hallo Inopiae,

    das hatte ich schon probiert.
    Wenn ich das Ganze mit Value versuche bekomme ich immer eine Fehlermeldung, in der ein angebliches Datum von 01.01.0001 steht.
    Es steht aber immer ein gültiges Datum drin.

    Anhand der Kontrolle über die Textboxen kann ich sagen, dass wenn ein Datum im DTP nicht angezeigt wird, der Value im DTP richtig steht, aber im Text nichts oder der vorherige steht.
    Die Checkbox ist dann auch unchecked. Wenn ich dieses Phänomen habe, an dem nicht angezeigten Datum die Checkbox von Hand aktiviere und den gleichen Datensatz erneut auswähle, steht das richtige Datum drin.

    Ich habe meine Änderungen jetzt noch mal auf Value geändert und konnte beim Geburtsdatum feststellen, dass ich eine Zeile ohne Geburtsdatum gar nicht mehr auswählen kann. Ändere ich Value auf Text funktioniert es.