Hi Steve,
Ich habe mal diesen Code in mein Projekt eingefügt und der funktioniert wunderbar
Hiermit werden im Datagrid die "bezahlt" und die "nicht bezahlt" Spalten je nach Status farbig dargestellt.
D.h. bezahlt --> hellblau, nicht bezahlt -->hellrot
[u]Die Klasse:
#Region "Bezahlt/nicht Bezahltzellen nach Inhalt färben"
' eigener Spaltenstil, um Zellen nach Inhalt einzufärben
Public Class clsBezahltZellenFarbig
Inherits DataGridBoolColumn
Private _type As Boolean
Public Sub New(ByVal type As Boolean)
MyBase.New()
_type = type
Me.AllowNull = False
End Sub
' Überschreiben der Paint-Methode, um entsprechend dem Zellinhalt
' ein neues farbliches Aussehen der Anzeige zu erzeugen
Protected Overloads Overrides Sub Paint(ByVal g As Graphics, _
ByVal bounds As Rectangle, ByVal source As CurrencyManager, _
ByVal rowNum As Integer, ByVal backBrush As Brush, _
ByVal foreBrush As Brush, ByVal alignToRight As Boolean)
Try
' Objekt mit dem aktuellen Zellinhalt bereitstellen
Dim o As Object = Me.GetColumnValueAtRow(source, rowNum)
' Objektinhalt prüfen: Achtung! Prüfung muss bei jedem Feldinhalt
' fehlerfrei arbeiten.
If o Is System.DBNull.Value Then
backBrush = Brushes.Yellow
Else
If CType(o, Boolean) Then
If _type Then
' Die Spalte „bezahlt“ soll hellgrün markiert sein wenn
' bezahlt gecheckt ist.
backBrush = Brushes.LightBlue
Else
' Die Spalte „nicht bezahlt“ soll hellrot markiert sein
' wenn nicht bezahlt gecheckt ist.
backBrush = Brushes.LightCoral
End If
Else
backBrush = Brushes.White
End If
End If
' Basismethode mit ggf. geänderten Farben aufrufen
MyBase.Paint(g, bounds, source, rowNum, backBrush, foreBrush, _
alignToRight)
Catch ex As Exception
Trace.WriteLine(ex.ToString)
End Try
End Sub
End Class
#End Region [u]In Form3 wo das Datagrid ist:
Private Sub Spaltendarstellung()
' neuer SpaltenStil
Dim newCS As DataGridColumnStyle
' neuen TableStyle erstellen
Dim myTS As New DataGridTableStyle
' dem TableStyle einen Namen geben
myTS.MappingName = "Tab1"
' DataTable aus der DataSource des DataGrid holen
'Dim myDT As DataTable = CType(DataGrid1.DataSource,
' DataSet1.DB2005_1DataTable)
Dim myDT As DataTable = CType(DataGrid1.DataSource, DataView).Table
' Für jede Spalte einen ColumnStyle erstellen
For i As Integer = 1 To myDT.Columns.Count - 1
' neuen eigenen ColumnStyle erstellen
If myDT.Columns(i).DataType Is GetType(Boolean) Then
If myDT.Columns(i).ColumnName = "bezahlt" Or myDT.Columns( _
i).ColumnName = "nicht bezahlt" Then
newCS = New clsBezahltZellenFarbig(myDT.Columns( _
i).ColumnName = "bezahlt")
Else
newCS = New DataGridBoolColumn
End If
Else
newCS = New DataGridTextBoxColumn
End If
With newCS
' demn ColumnStyle Namen der Spalte aus der DataTable zuordnen
.MappingName = myDT.Columns(i).ColumnName
' Spaltennamen als Überschrift
.HeaderText = myDT.Columns(i).ColumnName
' neuen ColumnStyle dem TableStyle zuordnen
myTS.GridColumnStyles.Add(newCS)
End With
Next
' alten TableStyle entfernen
Dim oldTS As DataGridTableStyle = DataGrid1.TableStyles( _
myTS.MappingName)
If Not oldTS Is Nothing Then DataGrid1.TableStyles.Remove(oldTS)
DataGrid1.TableStyles.Add(myTS)
End Sub So jetzt meine Frage, wie muss ich die Klasse verändern wenn ich eine abfrage machen möchte in der Spalte Geschlecht, z.B. Männlich -->blau, Weiblich -->Pink?
Den Spaltenstil muss man auch ändern oder?
Gruß
Chara
VB@rchiv its the Best
|