Im DGW dargestellte Zeiten in Label addieren?

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von carwashbuxtehude.

    Im DGW dargestellte Zeiten in Label addieren?

    Hallo,

    möchte gerne Zeiten die im DGW dargestellten Zeiten in einem Label als Summe anzeigen lassen.
    Es geht darum Standzeiten zu addieren.
    wie z.B.:1:30 + 0:55 = 2:25 Std.

    Bis jetzt mache ich es so, stimmt natürlich vorne und hinten nicht:

    Quellcode

    1. For i As Integer = 0 To DataGridView1.Rows.Count - 1
    2. If DataGridView1.Rows(i).Cells(9).Value IsNot DBNull.Value Then
    3. summe7 += CSng(DataGridView1.Rows(i).Cells(9).Value)
    4. End If
    5. Next
    6. Label35.Text = summe7


    Habe auch schon mal im Netz geschaut, da geht es aber meistens nur um Berechnung von Zeit Differenzen.

    Vielleicht hat einer einen Tipp für mich.
    :thumbsup:


    Matthias

    carwashbuxtehude schrieb:

    Berechnung von Zeit Differenzen.
    1. Gib Deinem Projekt Option Strict On.
    2. Wenn es sich hier nur um Zeitdifferenzen handelt, sieh Dir die .NET-Struktur TimeSpan an.
    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!
    Habe etwas nachgeschaut und dann mit .TimSpan hinbekommen. Danke für die Info!!
    Nun muss der Benutzer zwar die Ausfallzeit in Minuten eingeben, aber da werde ich noch einmal weiterschauen.
    Habe es jetzt erst einmal so gemacht:

    Quellcode

    1. For i As Integer = 0 To DataGridView1.Rows.Count - 1
    2. If DataGridView1.Rows(i).Cells(9).Value IsNot DBNull.Value Then
    3. summe7 += CSng(DataGridView1.Rows(i).Cells(9).Value)
    4. End If
    5. Next
    6. Dim tf As TimeSpan = TimeSpan.FromMinutes(summe7)
    7. Label35.Text = tf.ToString



    Danke für die Hilfe
    Matthias

    carwashbuxtehude schrieb:

    Es geht nicht um Zeitdifferenzen Ich möchte nur Zeiten addieren.
    Differenzzeiten bzw. Zeitdifferenzen offensichtlich. Es gibt da einfach nur den Begriff Dauer, und eine Dauer kann positiv oder negativ sein, null natürlich auch.

    carwashbuxtehude schrieb:

    Nun muss der Benutzer zwar die Ausfallzeit in Minuten eingeben
    Da hast Du Dir aber nicht viel Mühe gegeben, Du hast ja nicht mal in meinen Link reingeschaut. ;(
    Bilder
    • Span.png

      14,01 kB, 681×132, 146 mal angesehen
    • Span02.png

      24,79 kB, 1.275×309, 130 mal angesehen
    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!
    Hallo Matthias,

    aber bei einer Sache entdecke ich bei Dir ein Muster: Du willst immer das arme DataGridView mit Gewalt in einer Schleife durchlaufen.
    Erinnerst Du Dich? Alle Deine Anfragen zu diesem Projekt in allen von Dir gestarteten Threads fangen mit einer Schleife an.
    Wieso ^^ ?
    Du hast doch eine DataTable (zumindest hattest Du bis jetzt eine) - lass die FInger von den Daten im Grid und nimm die Table.

    Und auch bei Deinem aktuellen Vorhaben brauchst Du bestimmt keine Schleife.
    Wenn z.B. Deine Minuten einfache Integerwerte sein würden, reicht ein Einzeiler zum Summieren (Achtung - das ist nur ein Beispiel zum Summieren von Spalten, nicht Deine Endlösung):

    VB.NET-Quellcode

    1. Label35.Text = String.Format("{0}", DeineDataTable.Compute("Sum(DeinMinutenFeld)", "")) & " Min."

    Vielleicht kann man sogar DateTime so ähnlich summieren? Weiß ich nicht genau - müsste man probieren.

    Was ich aber sagen möchte - suche bitte performante Lösungen, vermeide Schleifen und Finger weg von den Inhalten des Views - deswegen heißt es View und nicht DataFassmichanGrid.

    LG,
    Bruno

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

    diylab schrieb:

    Vielleicht kann man sogar DateTime so ähnlich summieren?
    DateTime ist Datum und Uhrzeit.
    Bevor Du was weiteres in dieser Richtung tust, beantworte bitte folgende Frage:
    Was ist 1. April 2014, 7:15 Uhr PLUS 24. Dezember 2014, 18 Uhr?
    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!
    Ja - hast natürlich Recht Rod :) !
    ist natürlich Quatsch, ich wollte eigentlich nur andeuten, dass er nicht immer eine Schleife auf das arme Grid loslassen soll.
    Es gibt doch sicher für sein Problem eine andere Lösung - oder?

    Einen schönen Tag Jungs!

    Nachtrag:
    Bevor Du was weiteres in dieser Richtung tust, beantworte bitte folgende Frage: Was ist 1. April 2014, 7:15 Uhr PLUS 24. Dezember 2014, 18 Uhr?

    Ha! Ich habe die Lösung: 25. Dezril 4028 VirtelSchnackVorZorr :D

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

    Guten Morgen alle zusammen,
    natürlich habe ich alles nachgeschaut und habe mich aber dafür entschieden, das der Benutzer die Standzeiten in Minuten über NumericUpDown eingeben kann.
    Denke mal, das dadurch auch Falscheingaben eher ausgeschlossen werden.
    Das mit der Schleife werde ich mir jetzt auch einmal zu Herzen nehmen und mir heute einmal anschauen was ihr vorgeschlagen habt.

    Danke und einen schönen Tag


    Matthias