Problem mit Datum bzw. Vergleich

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Problem mit Datum bzw. Vergleich

    Hallo,
    ich bräuchte mal wieder einen Schubs in die richtige Richtung..
    Ich parse Zeilen aus Dateien. Diese Zeilen haben einen Zeitstempel am Anfang DD.MM.JJJJ hh:mm:ss Zeilentext...
    Ich möchte nun nur die Zeilen eines bestimmten Zeitraums sortiert in eine Listbox schreiben. (Die Listbox kann ja nur JJJJ.MM.DD richtig sortieren..)
    Jetzt habe ich versucht den Zeitstempelstring zu Fuß zu analysieren aber ich fürchte ich werde darüber verrückt.
    Gibt es keine Funktion die den Zeitstempel per Formatstring erkennt und in ein Datum/Uhrzeit wandelt?
    Hat jemand ein paar Tipps für mich?
    VG Haegar
    Wenn man mit DataBinding arbeitet, könnte man die Daten unabhängig von der alles-als-Zeichenfolgen-betrachtende Sorted-Property der ListBox sortieren.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    ErfinderDesRades schrieb:

    Zitat von Haegar88: „Gibt es keine Funktion die den Zeitstempel per Formatstring erkennt und in ein Datum/Uhrzeit wandelt?“

    guck dir <code class="inlineCode">DateTime.Parse</code> an


    Perfekt! Danke, das hab ich gesucht!


    @VaporiZed:
    Sowas habe ich noch nicht gemacht. Ich les mich mal ein! Evtl muss ich nochmal nachfragen..

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

    Hallo,
    ich fürchte mit dem Thema Databinding/DatagridView habe ich noch zu viele lose Enden in der Hand..
    Mein Versuch sieht so aus:

    VB.NET-Quellcode

    1. Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. LogEntries = New BindingList(Of LogEntry)()
    3. For Each .....
    4. LogEntries.Add(New LogEntry(DateValue, FolderName, Line))
    5. Next
    6. dgvLogEntries.DataSource = LogEntries
    7. dgvLogEntries.Update()
    8. End Sub


    Meine Daten werden im DatagridView richtig dargestellt. Leider kann ich über keinen der Spaltenköpfe sortieren. Es tut sich nichts, nichtmal das "Dreieck" wird dargestellt.
    Die Sortiereigenschaft der Spalten steht auf "automatisch". Hat jemand ne Idee was ich falsch mache?

    Viele Grüße
    Haegar88

    Code-Tags eingefügt. ~Thunderbolt

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

    Den Grund sieht man schnell BindingList unterstützt so kein Sortieren. Anscheinend muss man selbst eine abgeleitete BindingList-Klasse bauen in der man das Sortieren selbst erledigt, ziemlich fies.

    Stattdessen könntest du mal typisierte DataTables anschauen. Die können auf jeden Fall von Haus aus sortiert werden

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

    Such mit der Suchmaschinene deines Vertrauens nach einen C# VB Konverter. Der macht dir dann VB Code daraus(Online). Nicht immer geht das ohne Fehler, weil es Sachen in C# gibt die es nicht in VB gibt. Es gibt solche Konverter auch als Erweiterung für Visual Studio.

    Du bist seit 5 Jahren dabei und kannst keine Klasse erstellen? Wie programmierst du denn? Ich rieche schon Spaghetties. Klick oben im MenuStrip auf Projekt und schau was du siehst.
    Dann LogEntries = New SortableBindingList(Of LogEntry)
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

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

    Wenn du in Projekt -> Hinzufügen wählst dann kannst du u.a. Klasse auswählen, du vergibst einen Namen und bekommst eine neue leere Klasse mit diesem Namen präsentiert.
    Den Code, den du konvertiert hast, ist auch eine Klasse, also einfach die leere Klasse damit ersetzen. Namespace brauchste nicht drum machen, dann landet das automatisch in deinem Projektnamespace
    Die Imports oben drüber wirste brauchen, fügt das Studio aber auch gerne automatisch hinzu.

    Alternativ kannste den Code unter deine Form Klasse auch drunterballern, aber das ist ja nun nicht sonderlich schön und aufgeräumt.

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

    Haegar88 schrieb:

    Vom dissen wird es auch nicht besser!


    Das war nicht meine Absicht, aber dir auf dramatische Art klar machen, dir fehlt da sehr wichtiges Wissen, das war meine Intention. Auch wenn man nur ab und zu kleine Tools macht, muss man sich mit den Grundlagen auseinandersetzen. Sonst kann man es nicht richtig. Benutzt man keine Klassen kann man unmöglich Objektorientiert arbeiten, was zum sogenannten "Spaghetti Code" führt. Spaghetti, weil ellenlang, was man vermeiden sollte, weil das sonst unwartbar wird. Schaust du dir z.B. nach einem Jahr "Spaghetti Code" an, den du selbst geschrieben hast, weist du selbst nicht mehr wo vorn und hinten ist.

    Du kennst also auch Namespaces nicht? In Namespaces können weitere namespaces sein, Klassen, Enumerationen, Strukturen etc.. pp. Mit z.B. "Imports System.IO" importierst du den Namesapce System.IO. Das solltest du schon mal in der Art gesehen haben. Erstelle eine Klasse die so heist, wie in dem verlinkten Code. Den namespace brauchst du nicht über nehmen, kannst du ersatzlos entfernen, ansonsten musst du den namespace importieren, kannst in aber auch Kartapfel nennen, das hast du die freie Wahl. Namespaces nimm man und eine gescheite Struktur zu haben, könnte man im erntferntesten Sinn, auch Gruppe nennen.

    Kleine Starthilfe,

    VB.NET-Quellcode

    1. Imports System
    2. Imports System.Collections.Generic
    3. Imports System.ComponentModel
    4. Public Class SortableBindingList(Of T)
    5. 'hier hast du dann den Rest hinzuzufügen
    6. End Class

    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

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

    Vielen Dank euch beiden, jetzt funktionierts! Hat jemand noch einen Tipp wie ich aus dem Programm heraus einmal die Sortierung aufwärts triggere?
    @DTF: Wann/für was erstellt man denn eine Klasse? Ich habe bisher den Code immer in Funktionen und Unterprogramme aufgeteilt um es übersichtlich
    und wartbar zu halten.
    Einfaches Beispiel, das selbsterklärend sein sollte:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Public Class Human
    3. Public Height As UInt32
    4. Public Name As String
    5. Public Alter As UInt32
    6. End Class
    7. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    8. ' zu Sphagetti führender Code
    9. Dim karlName As String
    10. Dim achimName As String
    11. Dim karlHeight As UInt32
    12. Dim achimHeight As UInt32
    13. 'Objectorientiert
    14. Dim Karl As Human = New Human()
    15. Karl.Height = 198
    16. Karl.Name = "Karl Heinz"
    17. Dim Achim As Human = New Human()
    18. Achim.Alter = 1001
    19. End Sub
    20. End Class


    Nun entscheide selbst, was ist lesbarer, aber auch wartbarer. Klar hab so ein paar Zeilen mehr, aber die Klasse gehört in eine seperate Datei, versuch mal so zu arbeiten, nach der Zeit wirst du merken wie sich das positiv auf deine Code-Qualität auswirkt. Ich versuche in einer klasse höchsten 300 Zeilen zu haben, geht aber auch nicht immer. So hast du dann "Bausteine" die du nutzen kannst.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

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

    @Haegar88
    Das hatte Haudruferzappeltnoch weiter oben schon geschrieben. Ansonsten einfach (am besten in eine neue Datei)

    VB.NET-Quellcode

    1. Class NameDerKlasse
    2. End Class

    Vielleicht als kleine Fortführung die Beispiele der Stufe 1-3 aus folgenden Thread, falls interesse besteht:
    WinForms Projektentwicklung bzgl. der Rolle des Formulars
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.