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:
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. 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
Anzeige
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. |
sevZIP40 Pro DLL Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
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. |