Datenbank mit Datumsspalte und DBNull Möglichkeit

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Datenbank mit Datumsspalte und DBNull Möglichkeit

    Eine Datumsspalte die auch DBNull-Werte enthalten kann, scheint nicht so einfach zu sein.
    Solange ich ein Datum drin stehen habe oder nur z.B. durch einen DateTimePicker ein neues Datum auswähle klappt wunderbar.
    Wenn ich aber ein Datum in einer Zeile stehen habe und dieses löschen möchte, wird es scheinbar sehr schwierig.

    Ich habe ein paar DateTimePicker gefunden, die das wohl handhaben sollten, die gefielen mir aber nicht so in der Verwendung. Manche simulierten nur ein DBNull-Wert, bei Zurückschreiben der DB stand aber immer noch ein Datum drin.
    Momentan habe ich das anders gelöst.

    Die Datenbank wird in ein DataSet/DataTable eingelesen. Dieses ist zwecks Filterung an ein DataView und das an eine BindingSource gebunden.
    Das DGV ist an die BS gebunden und dient zur Anzeige in Tabellanansicht.
    In der Detailsansicht habe ich diverse Textboxen zur Ansicht. Wenn ich nun auf einen Button neben einer DatumsTextbox klicke, dann schreibe ich in die BindingSource einfach einen DBNull.Value.

    VB.NET-Quellcode

    1. Dim DR As DataRow = CType(Tbl_MitgliederBindingSource.Current, DataRowView).Row
    2. DR.Item("Geburtsdatum") = DBNull.Value


    Meine Frage wäre, ob es da eine andere Möglichkeit gibt, dies zu realisieren.
    1. warum hast du ein DataView zw. BindingSource und DGV? BS hat doch die FilterFunktion bereits eingebaut?

    2. Verwende die typisierte Methode Tbl_MitgliederRow.SetGeburtsDatumNull() - dassis sauber und einfach.
      gugge nochmal im ObjektKatalog an, was son typisiertes Dings alles drauf hat - es lohnt sich, die 10min zu investieren.

    3. Ich empfuhl dir bestimmt schon meine BindingSource-Extensions aussm [VB 2008] DBExtensions - Upload.

      Dort ist die .Current - Property typisiert gewrappert unter dem Namen BindingSource.At(Of T), und dieses .At ohne index-Parameter gibt die typisierte Row von BindingSource.Current zurück, und .At(index) gibt die typisierte Row am index zurück - also bei mir wäre formuliert:

      VB.NET-Quellcode

      1. Tbl_MitgliederBindingSource.Current.At(Of Tbl_MitgliederRow).SetGeburtsDatumNull()
      und gut is.

    4. Der Standard-DateTimePicker hat eine .ShowCheckbox - Property dafür - um anzuzeigen, ob das Datum gelten solle oder nicht.