vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Controls · DataGrid & DataGridView   |   VB-Versionen: VB2008, VB201021.12.12
Eine Methode zum Erzeugen einer Summenzeile zu einem Datagridview

Es wird eine einfache Methode zum Anzeigen von Summen zu bestimmten Spalten eines Datagridview vorgestellt.

Autor:   Dietrich HerrmannBewertung:     [ Jetzt bewerten ]Views:  10.538 
ohne HomepageSystem:  Win7, Win8, Win10, Win11kein Beispielprojekt 

Es gibt zwar im Internet einige Lösungen zu der Problematik, wie man unter einem DataGridView eine einfache Summenzeile erzeugen kann, in der zu bestimmten Spalten des DGV die Summenwerte angezeigt werden. Ich habe in meinem Vorschlag einfach nur "Bordmittel" von VB verwendet und erzeuge diese Summenzeile mittels eines zweiten DGV mit nur einer Zeile.

Hier die Vorgehensweise:

  • Möglichst in einen Container setzt man die beiden DGV's; das für die Summen mit Dock = Bottom und das DGV für die Daten mit Dock = Fill.
  • Das Daten-DGV (bspw. dgvDaten genannt) richtet man nach den Erfordernissen ein, es kann daten- oder ungebunden sein.
  • Das Summen-DGV (bspw. dgvSummen genannt) richtet man in der gewünschten Höhe ein, ohne ColumnHeaders. Es sollte auch ReadOnly sein. Und es muss noch folgende Eigenschaften haben:
With dgvSummen
  .RowCount = 1
  .BorderStyle = None
  .ColumnCount = dgvDaten.ColumnCount
  .ColumnsHeadersVisible = False
  .ReadOnly = True
  .AutoSizeColumnsMode = dgvDaten.AutoSizeColumnsMode
  .ScrollBars = ScrollBars.None
  .RowHeadersVisible = False ' oder True (genau wie in dgvDaten definieren)
End With

Die folgende Hilfsfunktion erledigt die Ermittlung der Summen für vorgegebene Spalten. Der Parameter colFeld() soll die Namen oder Indizes der für Summierung zu berücksichtigenden Spalten enthalten.
Also bspw.:

Dim summCols() As String = {"Bruttbetrag", "Nettobetrag", "Mwst"}

oder etwa

Dim summCols() As Short= {3, 2, 4}

Die Funktion:

Sub summZeile(colFeld() As Object)
  ' Summieren von Spalten
  If dgvDaten.RowCount = 0 Then Exit Sub
 
  Dim idc As Short
 
  ' Löschen der Summenfelder
  For Each dc As DataGridViewCell In dgvSummen.Rows(0).Cells
    dc.Value = DBNull.Value
  Next 
 
  ' Berechnen der Summenfelder gemäß der vorgegebenen Spalten
  For i As Short = 0 To dgvDaten.RowCount - 1
    For j As Short = 0 To colFeld.Length - 1
      idc = dgvDaten.Columns(colFeld(j)).Index
        If dgvDaten.Columns(colFeld(j)).Visible Then
          With dgvSummen.Rows(0).Cells(idc)
            If IsDBNull(.Value) Then .Value = 0
            .Value += If(IsDBNull(dgvDaten.Rows(i).Cells(idc).Value), 0, _
              dgvDaten.Rows(i).Cells(idc).Value)
            .Style.Alignment = DataGridViewContentAlignment.MiddleRight
          End With
        End If
    Next 
  Next 
End Sub

Diese Funktion rufe ich nach dem Laden des dgvDaten auf (beim DataSource-festlegen bspw.), insbesondere auch dann, wenn ich auf dgvDaten Filter anwende.

Allerdings muss das Summen-DGV noch im Erscheinungsbild mit dem Daten-DGV so zu sagen synchronisiert werden, Stichwort Spaltenbreiten und horizontales Scrollen. Im Paint-Ereignis von dgvDaten folgenden Code einsetzen für das Setzen der Spaltenbreiten:

With dgvSummen
  .RowHeadersWidth = dgvDaten.RowHeadersWidth ' falls definiert!
  For i As Short = 0 To dgvDaten.Columns.Count - 1
    If dgvDaten.Columns(i).Visible Then .Columns(i).Width = dgvDaten.Columns(i).Width
  Next 
  .Height = .Rows(0).Height
 
  ' dieser Text und auch die Zelle sind nur ein Beispiel von mir!
  .Rows(0).Cells(3).Value = "Summen" 
End With

Nun noch das Scrollen einrichten. Das Synchronisieren des horizontalen Scrollens der beiden DGV's erreicht man mit:

Private Sub dgvDaten_Scroll(sender As Object, e As ScrollEventArgs) _
  Handles dgvDaten.Scroll
 
  dgvSummen.HorizontalScrollingOffset = dgvDaten.HorizontalScrollingOffset
End Sub

Das ist schon alles. Wer möchte kann statt Summen auch eventuell benötigte Spalten-Mittelwerte ermitteln und eintragen.

Dieser Tipp wurde bereits 10.538 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel