Minimum Date in Datagrid View

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Peter329.

    Minimum Date in Datagrid View

    Hi,

    Ich habe eine Datagrid View in der ich den jeweiligen Timestamp von .exe Dateien eintrage: dtsDebug, dtsRelease und dtsProduction

    Nun kann es sein, dass ich von einem Programm nur eine Debug Version habe und noch keine Release Version bzw. Production Version. In diesem Fall trage ich für den Timestamp das kleinstmögliche Datum ein, den 01.01.0001 00:00:00

    VB.NET-Quellcode

    1. Dim MinDate As Date = Nothing


    So sieht mein Coding dann aus:

    VB.NET-Quellcode

    1. dtsRelease = MinDate
    2. ...
    3. dgvApplications.Rows.Add(Path.GetFileName(DebugBase),
    4. ApplicationStatus,
    5. dtsDebug,
    6. dtsRelease,
    7. dtsTarget)


    Das funktioniert auf meinem Desktop hervorragend ! Die Spalte dtsRelease ist kleiner als jedes andere Datum ... und in der Datagrid View wird dtsRelease als leere Zelle angezeigt.

    Auf meinem Laptop funktioniert das identische Coding NICHT !

    dtsRelease wird als 01.01.0000 00:00:00.000 angezeigt.

    Merkwürdigerweise klappt aber das folgende Coding:

    VB.NET-Quellcode

    1. dgvApplications.Rows.Add(Path.GetFileName(DebugBase),
    2. ApplicationStatus,
    3. dtsDebug,
    4. Nothing,
    5. dtsTarget)


    Wenn ich "nothing" fest einprogrammiere, wird dtsRelease als leere Zelle angezeigt, sowohl auf meinem Desktop als auch auf meinem Laptop ! Im Debugger sehen die Variableninhalte bei beiden Codings absolut GLEICH aus !

    Wie erreiche ich denn, dass dtsRelease zwingend als leere Zelle angezeigt wird, wenn es nothing ist?

    Ich hoffe, ich habe mein Problem verständlich machen können !

    LG
    Peter

    P.S.: Mein Desktop und mein Laptop sollten eigentlich "Spiegelbilder" sein, d.h. gleiches Betriebssystem, gleiche Software, gleicher Wartungsstand.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Peter329“ ()

    Die Spalte Release ist eine:

    DataGridViewTextBoxColumn

    Format: dd.MM.yyyy HH:mm:ss.fff

    Der Datentyp von DgvCell.Value ist Object. Und damit verstehe ich, warum das zweite Coding funktioniert, wenn ich "nothing" hart einprogrammiere.

    Wie kann ich denn jetzt erreichen, dass der Default Wert von dtsRelease in Spaces umgesetzt wird ?

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

    Da deine Column eh vom Typ Text ist kann man das so machen

    Beispiel:

    Dim sDatum As String
    Dim NurDebug As Boolean

    If(NurDebug) Then
    sDatum = ""
    Else
    sDatum = Date.Now.ToString()
    End If

    Grid.Rows.Add(bla,sDatum, bla)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    VB.NET-Quellcode

    1. Dim myRelease As String = If(dtsRelease = Nothing, "", dtsRelease.ToString("dd.MM.yyyy HH:mm:ss.fff"))
    2. dgvApplications.Rows.Add(Path.GetFileName(DebugBase),
    3. ApplicationStatus,
    4. dtsDebug,
    5. myRelease,
    6. dtsTarget)


    Damit kann man schon das Minimum Date in den Null String umsetzen. Aber, jetzt stimmt die Sortierreihenfolge nicht mehr.

    Durch die Umwandlung mit .ToString wird jetzt ein reiner Character Vergleich gemacht und damit kommt der "04.10.2017" vor dem "06.02.2016".

    So geht das also leider nicht.

    Aber ich habe mich jetzt wieder daran erinnert, wie ich das gelöst hatte. Ich nehme einfach das CellFormatting Event:

    VB.NET-Quellcode

    1. If e.Value.ToString = "01.01.0001 00:00:00" Then e.Value = "" 'Replace minimum date by spaces


    Man muss hier mit .String arbeiten, weil e.Value vom Typ Object ist !

    Die Frage ist jetzt natürlich, wieso dieses Coding auf meinem PC funktioniert, aber nicht auf meinem Laptop.

    Auch das habe ich jetzt herausgefunden: Auf meinem Laptop wandelt .String das Datum in "01/01/0001 00:00:00" um !

    Das hab ich jetzt in den Griff bekommen.

    VB.NET-Quellcode

    1. If e.Value.ToString = MinDate.ToString Then e.Value = "" 'Replace minimum date by spaces


    So läuft das jetzt auf beiden Rechnern !

    Die einzige Frage, die ich jetzt noch habe: wo stelle ich denn das Datumsformat ein ? Ich hätte gern, dass auch auf meinem Lappi die Funktion .String "01.01.0001 ..." generiert.

    LG
    Peter

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Peter329“ ()

    Meine letzte Frage scheint irgendwie untergegangen zu sein:

    dtsRelease ist vom Typ Date

    Auf meinem Desktop liefert dtsRelease.ToString --> "01.05.2017 ..."

    Auf meinem Laptop erhalte ich --> "01/05/2017 ..."

    Wo wird das denn eingestellt. Im Windows ? Im .Net ? In der Application ?

    Im Debugger sieht dtsRelease übrigens identisch aus "#1/5/2017 ...#

    Mir ist schon klar, dass ich das Format mit einem Formatstring erzwingen kann. Es geht mir hier halt ums Prinzip ... :) Na, vielleicht weiß das ja jemand.
    LG
    Peter
    .ToString legt die augenblicklich aktive Kultur der Programm-Umgebung zugrunde - meist (aber nicht immer) entsprechend der Kultur-Einstellung des Windows.
    evtl. hat dein Lappie ein englisches Windows, und dein Desktop deutsch?


    Formatstring-Erzwingungen sind da sehr problematisch, weil wenn dein Proggi mal produktiv geht, und ein echter Engländer arbeitet damit - den wird die dann erzwungene deutsche Formatierung ziemlich irritieren.
    Ok, ich denke das ist es. Normalerweise meide ich "german" wie der Teufel das Weihwasser ! Da hab ich wohl bei meinem Desktop eine schwache Stunde gehabt. Na gut, jetzt ist das auf meiner menu card für die nächste Generierung ! :)

    Die Sache ist damit wohl ausgekaut. Danke noch mal an alle Ratgeber für eure unendliche Geduld ! And have a nice day ! :)

    LG
    Peter