vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Sch?tzen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2018
 
zurück
Rubrik: Controls · DataGrid & DataGridView   |   VB-Versionen: VB2005, VB200821.02.11
Visuell gruppierte Ansicht eines DatagridView

Mit der gezeigten Funktion lässt sich der Inhalt eines DatagridView visuell gruppiert nach wählbarem Spaltenwert mit zwei alternierenden Farben gestalten.

Autor:   Dietrich HerrmannBewertung:     [ Jetzt bewerten ]Views:  10.614 
ohne HomepageSystem:  Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

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:

  1. Die Hinterlegung der Zeilen mit jeweils gleichem spez. Spaltenwert mit alternierenden Farben, wenn der Spaltenwert wechselt.
  2. Zusätzlich kann angegeben werden, ob der spez. Spaltenwert immer zu sehen sein soll oder nur in der ersten Zeile seines Auftretens.
  3. Gibt es je Zeile noch andere Spalten, deren Werte immer in der Gruppe gleich sind, kann man diese Spalten in einem Feld angeben. Index oder Name der Spalten sind möglich. Dann werden diese Spalten wie die spez. Spalte gezeigt.

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 10.614 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
(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.
 
   

Druckansicht Druckansicht Copyright ©2000-2018 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