Meine vorgestellte Lösung ist ein wenig erweitert gegnüber schon vorhandenen. Die Funktion coloredRowsOfValue dient der rein visuellen Gestaltung des DGV; die zu Grunde liegenden Daten werden nicht verändert. Voraussetzung für die Anwendung ist das Vorhandensein einer speziellen Spalte deren Werte für eine Gruppierung geeignet sind und die Sortierung des DGV eben nach diesen Spaltenwerten. Also bspw. Personaldaten, sortiert nach Namen, bei denen zu jedem Namen mehrere Zeilen existieren. Dann realisiert die Funktion:
Die Funktion: ''' <summary> ''' Erzeugen gefärbter Zeilen-Gruppen (alternierend) auf Grund ''' von Wert in speziellem Feld ''' </summary> ''' <param name="theDGV">das DataGridView</param> ''' <param name="compCol">die Spalte mit dem speziellen Wert ''' (Name oder Index)</param> ''' <param name="Color1">Farbe1</param> ''' <param name="Color2">Farbe2</param> ''' <param name="anzFlag">wenn ja, wird Wert von compCol angezeigt, ''' sonst nicht</param> ''' <param name="anzCols">ein Feld der Spalten, die in Anzeige ''' einbezogen werden sollen (Namen|Indizes)</param> ''' <remarks>anwenden im Paint-Ereignis des betreffenden DatagridView</remarks> Public Sub coloredRowsOfValue(ByVal theDGV As DataGridView, _ ByVal compCol As Object, _ ByVal Color1 As Color, _ ByVal Color2 As Color, _ Optional ByVal anzFlag As Boolean = True, _ Optional ByVal anzCols() As Object = Nothing) Dim cColor As Color = Color1 ' Spalten-Werte für den Vergleich Dim lastValue As Object = Nothing Dim aktValue As Object = Nothing With theDGV If .RowCount < 1 Then Exit Sub For i As Short = 0 To .RowCount - 1 ' Setzen des aktuellen Spalten-Werts aktValue = .Rows(i).Cells(compCol).Value ' wechselt der Spalten-Wert? If IsNothing(lastValue) OrElse Not lastValue.Equals(aktValue) Then lastValue = aktValue 'merken des letzten Spalten-Werts ' wechseln der Hintergrundfarbe der Zeilen If cColor = Color2 Then cColor = Color1 Else cColor = Color2 Else ' soll der spezielle Spaltenwert zu sehen sein? If Not anzFlag Then .Rows(i).Cells(compCol).Style.ForeColor = Color.Transparent ' Sollen noch weitere Spalten wie die spezielle Spalte erscheinen If Not IsNothing(anzCols) Then For j As Short = 0 To anzCols.Length - 1 .Rows(i).Cells(anzCols(j)).Style.ForeColor = Color.Transparent Next End If End If End If .Rows(i).DefaultCellStyle.BackColor = cColor Next i End With End Sub Aufgerufen wird die Funktion im Paint-Ereignis des DataGridView-Controls. Private Sub DatagridView1_Paint(ByVal sender As Object, _ ByVal e As PaintEventArgs) Handles DatagridView1.Paint Dim cols() As String = {"Vorname", "Geschlecht"} coloredRowsOfValue(dgUebersicht, "Nachname", Color.Beige, Color.Gainsboro, False, cols) End Sub Hier wird die Spalte "Nachname" als Gruppierungsspalte genommen. "Vorname" und "Geschlecht" sind Spalten, deren Werte ebenfalls wie "Nachname" in allen weiteren außer der ersten Zeile ausgeblendet werden. Übrigens: passende Farbkombinationen findet man bspw. bei meinem Tipp: Perfekte Farbkombinationen für das eigene Projekt Dieser Tipp wurde bereits 13.461 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 (einschl. Beispielprojekt!) 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. |
sevGraph (VB/VBA) Grafische Auswertungen Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! 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. |