DGV Zeiten aus Celle auslesen und berechnen

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Drachie.

    DGV Zeiten aus Celle auslesen und berechnen

    Moin zusammen,

    ich bin gerade dabei daten aus einer Datenbank für eine Auswertung aufzubereiten. Wie ich die Daten in das DGV bekommen habe ich soweit geschafft. Auch wie ich die werte entsprechend des Dropshipper anzeigen lassen kann.

    Nun aber zu meinem Problem dabei:

    Die Zeiten von Anfordern des Paketlabel bis zum druck sind in der Datenbank ebenfalls erfasst als wert im Format hh:mm:ss
    Bei dem aufrufen der Daten soll nun automatisch diese werde addiert werden und in einer TextBox ausgegeben werden. Bei mir hapert es in dem Falle mit der Berechnung der Gesamtzeit per schleife und die abschließende Berechnung der Durchschnittszeit.

    Anbei der Quellcode von dem abschnitt wo die Berechnung stattfinden soll. Ich weis hier nicht ob das so möglich / richtig ist. Vielleicht könnt ihr mal bitte einen blick drüber werfen und mir ggf. sagen / hinweise geben wo der Fehler liegt?

    VB.NET-Quellcode

    1. 'Wartezeit gesamt
    2. Dim z1 As Date
    3. Dim wertgesamt As String
    4. Dim anzahl As Integer = DataGridView1.Rows.Count - 1
    5. For i = 0 To anzahl
    6. If CBool(DataGridView1.Rows(i).Cells(5).Value) Then
    7. z1 = CDate(CType(z1, String) + CType(DataGridView1.Rows(i).Cells(5).Value, String))
    8. End If
    9. Next
    10. wertgesamt = Format(TimeValue(CType(z1, String)), "hh:mm:ss")
    11. waitingtime1.Text = wertgesamt

    Neu

    sowas sollte man aus den Daten berechnen, nicht aus den Datagridview-Zellen.
    Ist dir klar, dass du in zeile#8 zwei Strings addierst, und das Ergebnis in ein Date zu wandeln versuchst?
    Also von den Datentypen her total ungeeignet, zumal du ja eine Warte-zeitspanne berechnen willst, und kein Datum.
    (Unterschied von Zeitspanne und Datum ist dir klar? 21.4.2019, 5:23 ist ein Datum 5h, 23min ist eine Zeitspanne)

    Aber wie gesagt: man sollte das garnet aus dem DGV auspuhlen, sondern man sollte das typisierte Dataset benutzen.
    Dazu müsstest du aber dein typDataset in Designer-Ansicht mal alss Screenshot zeigen, und dazu sagen, an welche Tabelle dein DGV gebunden ist.

    Neu

    ich habe es mittlerweile so gelöst, das die werte direkt per abfrage errechnet wird und au entsprechen angepasst werden für die ausgabe. anbei die Lösung von mir:

    VB.NET-Quellcode

    1. Private Sub Zeitwerte()
    2. Dim scon As New SqlConnection
    3. Dim scmd As New SqlCommand
    4. Dim sdat As SqlDataReader
    5. Dim additon As TimeSpan
    6. Dim dwert As TimeSpan
    7. scon.ConnectionString = "Server='" & My.Resources.dbsrv & "';User ID='" & My.Resources.Dbuse & "';Password = '" & My.Resources.dbpw & "';Database='" & My.Resources.dbtable & "'"
    8. scmd.Connection = scon
    9. scmd.CommandText = "select cast(cast(avg(cast(CAST(diff as datetime) as float)) as datetime) as time) AvgTime, cast(cast(sum(cast(CAST(diff as datetime) as float)) as datetime) as time) TotalTime from gls_print"
    10. scon.Open()
    11. sdat = scmd.ExecuteReader
    12. While sdat.Read()
    13. additon = CType(sdat("TotalTime"), TimeSpan)
    14. dwert = CType(sdat("AvgTime"), TimeSpan)
    15. Dim Arbeitszeit1 As String = String.Format("{0:00}:{1:00}:{2:00}", additon.TotalHours, additon.Minutes, additon.Seconds)
    16. Dim Arbeitszeit2 As String = String.Format("{0:00}:{1:00}:{2:00}", dwert.TotalHours, dwert.Minutes, dwert.Seconds)
    17. duchschnitt.Text = Arbeitszeit2
    18. gesamt.Text = Arbeitszeit1
    19. End While
    20. scon.Close()
    21. End Sub