Monatsverbräuche aus DGV-Daten ermitteln, später Tagesverbräuche

  • VB.NET

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

    Monatsverbräuche aus DGV-Daten ermitteln, später Tagesverbräuche

    Hallo,

    ich habe mal wieder ein Problem...
    In meinem Projekt möchte ich die monatlichen Stromverbräuche mehrerer Messstellen ausgeben. Ich zeichne aktuell in verschiedenen Intervallen die Verbräuche auf und schreibe sie in eine MySQL-Datenbank.
    Um nun den monatlichen Stromverbrauch einer Anlage zu ermitteln filtere ich nach Datum (z.B. SELECT 'Zaehlerstand' FROM `Stromverbrauch`.`Anlage_01` WHERE 'Zeitstempel' BETWEEN '2022-10-01 00:00:00' AND '2022-10-01 23:59:59';), binde die Daten an ein DGV und subtrahiere vom Wert der letzten Zeile, den Wert der ersten Zeile.

    Nun zu meiner Frage.
    Aktuell binde ich Monat für Monat an das DGV. Kann ich mir die Daten relativ elegant auch aus einem DGV, ohne jedes Mal neu zu binden? Ich weiß, dass ich dann theoretisch immer das Datum vergleichen müsste, aber vielleicht ist es ja relativ einfach möglich?
    Ich frage in Hinblick darauf, dass ich die Verbräuche auch mal tagesweise ausgeben möchte.
    für eine Übersicht kann du PIVOT verwenden (Access als DB)
    hier ein Bsp.

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Data.OleDb
    3. Public Class Form2
    4. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    5. Dim FrozenColumsCount As Integer = 3
    6. ''für Jahre Monate
    7. Dim sql As String = <sql>
    8. TRANSFORM Sum(tbl_Tanken.GetankteLiter) AS SummevonGetankteLiter
    9. SELECT Format([TankDatum],"yyyy") AS [in Jahr],
    10. tbl_Tanken.KFZ, Sum(tbl_Tanken.GetankteLiter) AS Gesamt
    11. FROM tbl_Tanken
    12. GROUP BY Format([TankDatum],"yyyy"), tbl_Tanken.KFZ
    13. PIVOT Format([TankDatum],"mmm") In ("Jan","Feb","Mrz","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez");
    14. </sql>.Value
    15. ''für Jahre-Monate-Tage
    16. 'Dim sql As String = <sql>
    17. ' TRANSFORM Sum(tbl_Tanken.GetankteLiter) AS SummevonGetankteLiter
    18. ' SELECT Format([TankDatum],"yyyy") AS [in Jahr], Format([TankDatum],"mm") AS [in Monat], Sum(tbl_Tanken.GetankteLiter) AS Gesamt
    19. ' FROM tbl_Tanken
    20. ' GROUP BY Format([TankDatum],"yyyy"), Format([TankDatum],"mm")
    21. ' ORDER BY Format([TankDatum],"mm")
    22. 'PIVOT Format([TankDatum],"dd") In ("01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31");
    23. '</sql>.Value
    24. Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.jet.oledb.4.0;Data Source=E:\Adressen.mdb")
    25. Dim cmd As OleDbCommand = New OleDbCommand(sql, con)
    26. con.Open()
    27. Dim myDA As OleDbDataAdapter = New OleDbDataAdapter(cmd)
    28. Dim myDataSet As DataSet = New DataSet()
    29. myDA.Fill(myDataSet, "MyTable")
    30. DataGridView1.DataSource = myDataSet.Tables("MyTable").DefaultView
    31. DataGridView1.AllowUserToAddRows = False
    32. con.Close()
    33. con = Nothing
    34. With DataGridView1
    35. For i As Integer = 3 To .Columns.Count - 1
    36. .Columns(i).Width = 50
    37. .Columns(i).DefaultCellStyle.Format = "c"
    38. Next
    39. End With
    40. 'Freeze
    41. For i As Integer = 0 To FrozenColumsCount - 1
    42. DataGridView1.Columns(i).Frozen = True
    43. Next
    44. End Sub
    45. End Class


    so sieht die Übersicht dann aus