Datatable zusammenfassen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von frifri.

    Datatable zusammenfassen

    Hallo,

    ich habe eine ungebundene Datatable, die Daten möchte in zusammenfassen und dann in einem Datagridview anzeigen.
    Die Daten bestehen aus Umsätzen verschiedener Artikel. Ich möchte gleiche Artikel zusammenfassen und die Umsätze addieren.

    Geht das mit einem Filter oder besser die Datatable zusammengefasst kopieren?


    ArtikelNr Umsatz
    1 1
    2 1
    3 2
    2 2
    3 2
    1 2

    und danach dann
    ArtikelNr Umsatz
    1 3
    2 3
    3 4

    frifri schrieb:

    ich habe eine ungebundene Datatable
    Woher kommen die Daten? Aus einer Datenbank?
    Dann lies doch gleich eine gruppierte DataTable ein

    SQL-Abfrage

    1. SELECT ArtikelNr, SUM(Umsatz) AS GesamtUmsatz FROM mytable GROUP BY ArtikelNr
    und binde die DataTable an dein DGV.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    hier ein Bsp. , mit Distinct (ArtikelID) und summieren

    kannst du ja an deine bedürfnisse anpassen

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    4. Dim names = From row As DataGridViewRow In _
    5. DataGridView1.Rows.Cast(Of DataGridViewRow)() _
    6. Where Not row.IsNewRow _
    7. Select (CInt(row.Cells(0).Value)) Distinct
    8. For Each n In names
    9. Dim nArtikel As String = String.Empty
    10. Dim nEingang As Integer = 0
    11. Dim nAusgang As Integer = 0
    12. Dim nBestand As Integer = 0
    13. For i As Integer = 0 To DataGridView1.Rows.Count - 1
    14. If CInt(DataGridView1.Rows(i).Cells(0).Value) = n Then
    15. If DataGridView1.Rows(i).Cells(2).Value IsNot DBNull.Value Then
    16. nArtikel = CStr(DataGridView1.Rows(i).Cells(1).Value)
    17. nEingang += CInt(DataGridView1.Rows(i).Cells(2).Value)
    18. nAusgang += CInt(DataGridView1.Rows(i).Cells(3).Value)
    19. End If
    20. End If
    21. nBestand = nEingang - nAusgang
    22. Next
    23. 'Lagerbewegungen an Datagridview2
    24. DataGridView2.Rows.Add(n, nArtikel.ToString, nEingang, nAusgang, nBestand)
    25. Next
    26. End Sub
    27. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    28. 'Data
    29. With DataGridView1
    30. .Columns.Add("ArtikelId", "ArtikelId")
    31. .Columns.Add("Artikelname", "Artikelname")
    32. .Columns.Add("Eingang", "Eingang")
    33. .Columns.Add("Ausgang", "Ausgang")
    34. .Rows.Add(1, "Cyan", 45, 4)
    35. .Rows.Add(2, "M100-M109", 32, 8)
    36. .Rows.Add(3, "Magenta", 19, 5)
    37. .Rows.Add(3, "Magenta", 123, 0)
    38. .Rows.Add(3, "Magenta", 19, 4)
    39. .Rows.Add(3, "Magenta", 0, 64)
    40. .Rows.Add(2, "M100-M109", 8, 8)
    41. End With
    42. 'Spalten summen :
    43. With DataGridView2
    44. .Columns.Add("ArtikelId", "ArtikelId")
    45. .Columns.Add("Artikelname", "Artikelname")
    46. .Columns.Add("Eingang", "Eingang")
    47. .Columns.Add("Ausgang", "Ausgang")
    48. .Columns.Add("Bestand", "Bestand")
    49. End With
    50. End Sub
    51. End Class