Schleife mit Datum

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Schleife mit Datum

    Hi,

    möchte ein Datagridview füllen mit Tag.Monat.Jahr ... folgenden Ansatz habe ich mal gemacht... funktioniert natürlich ned...
    aber so sollts sein...

    VB.NET-Quellcode

    1. Dim Date1 As DateTime = "01.01." & Year(Now)
    2. Dim Date2 As DateTime = "31.12." & Year(Now)
    3. For i As Date = Date1 To Date2
    4. Tab_AbweichReisezeitenDataGridView.Rows.Add(i, DatumTag....)
    5. dann suche hier und das und setze ein...
    6. Next


    Könntet Ihr mir nen Tip geben?

    Gruß
    Iris


    edit:

    ein Versuch :

    VB.NET-Quellcode

    1. Dim Datum As Date = New Date(Year(Now), 1, 1)
    2. Do While Year(Datum) = Year(Now)
    3. Datum = Datum.AddDays(1)
    4. Tab_AbweichReisezeitenDataGridView.Rows.Add(Datum)
    5. Loop


    so funtkionierts.. :)

    hat sich erledigt..

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

    Hallo, danke für deine Antwort...

    also :)... in diesem Fall mißbrauche ich ein DGV nur für eine Anzeige... Es sollen/werden nur Daten angezeigt, die aus verscheienden Tabellen zusammengesucht werden...

    Das Form hat zwei DatePicker, von und bis, drückt mann auf "Anzeige" wird das DGV gefüllt... aber!... Die Schleife soll nur das Datum im Bereich von bis bereitstellen... Über das Datum hole ich mir aus bereits bereitgestellten Datatables daten raus...
    Jetzt wirst du sagen, warum mach ich nicht einfach eine Relation? ... Ja :) in diesem Fall nicht, da vom User nicht jeder Tag mir Werten versehen werden... In diesem Form wird praktisch alles angezeigt, jeder Tag...
    Bei einer Relation ist ja immer eine Voraussetzung pflicht... nämlich auch eine Tabelle mit alles Tagen eines Jahres zu haben - und das haben wir in diesem Fall nicht.
    ..hoffe ich konnte es irgendwie verständlich beschreiben :)

    hier mein Code - der schon mal soweit funktioniert

    VB.NET-Quellcode

    1. Private Sub Abrechnung1()
    2. Dim _startdatum As Date = CDate(DateTimePicker1.Text)
    3. Dim _enddatum As Date = CDate(DateTimePicker2.Text)
    4. Do While Year(_startdatum) = Year(_enddatum)
    5. ' weitere Daten aus den Tabellen Reisezeiten, Reisekosten, Erstattungen sammeln
    6. ' in DGV schreiben
    7. DataGridView1.Rows.Add(_startdatum) 'erstmal nur zum test
    8. ' nächster Tag
    9. _startdatum = _startdatum.AddDays(1)
    10. Loop
    11. End Sub
    Habe es nun etwas erweitert...

    habe das Problem mit dem von bis als Datum selbst und nicht nur als Jahr wie vorhin...

    Da kommt einfach keine Ausgabe...
    ... Kannst mir nicht erklären... Könnt Ihr mr sagen was ich da falsch gemacht habe???

    Do While vonDatum bisDatum ENDE...

    VB.NET-Quellcode

    1. Private Sub Abrechnung1()
    2. Dim _startdatum As Date = DateTimePicker1.Value.ToShortDateString
    3. Dim _enddatum As Date = DateTimePicker2.Value.ToShortDateString
    4. Do While _startdatum = _enddatum
    5. MsgBox("schauen ob was ausgegeben wird")
    6. ' Felder
    7. Dim _abfahrt As Date = Nothing
    8. Dim _rueckkehr As Date = Nothing
    9. Dim _dauer As Double = Nothing
    10. ' weitere Daten aus den Tabellen Reisezeiten, Reisekosten, Erstattungen sammeln
    11. For Each _UserReisezeiteingabe In DBkudoma_1DataSet.Tab_AbweichReisezeiten
    12. If CDate(_UserReisezeiteingabe.ARZ_Datum.ToShortDateString) = _startdatum Then
    13. _abfahrt = _UserReisezeiteingabe.ARZ_Abfahrt
    14. _rueckkehr = _UserReisezeiteingabe.ARZ_Rueckkehr
    15. _dauer = (_UserReisezeiteingabe.ARZ_Reisestunden / 60)
    16. Else
    17. ' hier muß dann die Reisezeit aus den Tagesberichten + Std.-Rückreise ermittelt werden
    18. _abfahrt = Nothing
    19. _rueckkehr = Nothing
    20. _dauer = Nothing
    21. End If
    22. Next
    23. ' in DGV schreiben
    24. DataGridView1.Rows.Add(_startdatum, _abfahrt, _rueckkehr, _dauer)
    25. ' nächster Tag
    26. _startdatum = _startdatum.AddDays(1)
    27. Loop
    28. End Sub


    EDIT!:
    Mit Haltepunkte konnte ich diese Meldung abfangen:

    Einzelschritt: Nichtbenutzercode "System.DateTime.Compare" wird übersprungen.

    Kann mir wer sagen was das zu bedeuten hat?


    EDIT2:

    Sorry, hätte vorherigen Beitrag editieren soll... war keine Absicht...
    1) UNBEDINGT OPTION STRICT ON:
    Dim _startdatum As Date = DateTimePicker1.Value.ToShortDateString


    2)Erstelle dir ein typbasiertes DataSet: [VB 2010] DatasetOnly: DB-Programmierung ohne Datenbank

    3)Binde Daten an ein DataGridView:
    DGV.DataSource = DataSet1.Table1

    4)Benutze Filter-Expressions(MSDN) oder Linq(MSDN), um Daten zu filtern:
    /nicht getestet
    zu 1.)

    habe dann aber das Problem dass ich Datum nicht mit Datum vergleichen kann... sondern Datum HH:MM:JJJ und Datum HH_MM:JJJJ

    die anderen Punkt muß ich erst mal durchdenken wie sie gemeint sind...
    aber warum erst wieder ein typbasiertes DataSet erstellen... ist ja nur eine Anzeige, die nicht weiter verarbeitet werden soll...

    Oder meinst du ein Dataset/Tabelle erstellen mir allen Datumsangaben ??

    da habe ich das gleich problem ... erstellen von Datum bis Datum...
    @Iris08
    Äpfel = (Birnen - 42) * (Erdbeeren + Gelb) / wahr
    macht Sinn oder? xD Weil genau das machst du unter strict off. Nur weil die IDE dir keinen Fehler um die Ohren wirft heißt es nicht, dass dein Code richtig ist. Darum lerne doch die Datentypen für dich arbeiten zu lassen. Auf die Weise stellt sich ein ganz anderes (richtigeres) Denken ein, du erkennst Zusammenhänge (z.B. wie Date und TimeSpan zusammenhängen und warum ein String etwas ganz anderes ist) und schreibst weniger Fehleranfälligen/Fehlerbehafteten Code (weil du ganz einfach schon vorher daran gehindert wirst und irgendwann garnichtmehr auf die Idee kommst Äpfel mit Birnen zu verrechnen).

    VB.NET-Quellcode

    1. Dim start As Date = Date.Parse("19.12.1991")
    2. Dim ende As Date = Today
    3. Dim i As Date = start
    4. Do While i < ende
    5. Console.WriteLine("Hatte Geburstag am: " & i.ToString)
    6. i = i.AddYears(1)
    7. Loop

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

    ok werde mich mal daran gewöhnen mit explizit on zu arbeiten...

    alles was ich bisher mache, ist selbst beigebracht mit Google & Co. und Büchern... Galileo usw.
    naja, geb mri mühe...


    aber bitte verrate mir doch eines...
    warum läuft eine Schleife nicht mit vonDatum und bis Datum...
    ?
    habe meinen Post editiert, da siehst du wie ich es machen würde. Habe btw auch nur von Goolge und dem Forum hier gelernt^^
    Option Explicit ist wieder etwas anderes^^ Option Strict ON

    Edit: Bei dir läuft die Schleife nicht, weil dort ein "while" (nicht zu verwechseln mit "until") steht - also "laufe solange start = ende ist". Das ist natürlich nie der Fall, die Schleife läuft nie. Mit dem = Operator musst du aufpassen, denn ein Datum kann am gleichen Tag liegen, aber z.B. eine andere Sekundenzahl haben, dann wären sie ungleich obwohl du das nicht beabsichtigst.
    lg

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

    lris08 schrieb:

    habe dann aber das Problem dass ich Datum nicht mit Datum vergleichen kann.
    DateTime-Strukturen werden so verglichen:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim date1 = DateTime.Now
    3. Dim date2 = date1.AddDays(-30)
    4. If date1 > date2 Then
    5. MessageBox.Show("1 größer")
    6. Else
    7. MessageBox.Show("2 größer")
    8. End If
    9. End Sub
    -------------------------
    Iris: Du hast hier bereits 1078 Beiträge im Forum gepostet, und manchmal bin ich der Meinung, Du hast noch gar nix dazugelernt. ;(
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!