Announcement

Collapse
No announcement yet.

DataGrid Farbe

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DataGrid Farbe

    Hallo, kann mir jemand helfen, ich möchte einzelne Zeilen in meinem DataGrid mit verschiedenen Farben ja nach Werten füllen.
    Danke

  • #2
    Hallo,

    dazu wird am Besten ein eigener Nachfolger von <b>DataGridTextBoxColumn</b> abgeleitet, der dann in den <b>TableStyles</b> für das DataGrid verbaut wird. Das folgende Beispiel demonstriert das Prinzip - ich habe es allerdings nur in VB.NET am Lager. Negative Währungswerte sollen durch eine rote Textfarbe gekennzeichnet werden. Die Datenbanktabelle sieht dabei so aus:
    <code>
    USE tempdb
    GO
    CREATE TABLE TESTTBL (
    RecID INTEGER NOT NULL IDENTITY PRIMARY KEY,
    Wert MONEY NOT NULL)
    GO
    INSERT INTO TESTTBL (Wert) VALUES (100.50)
    INSERT INTO TESTTBL (Wert) VALUES (-15.00)
    INSERT INTO TESTTBL (Wert) VALUES (200.50)
    INSERT INTO TESTTBL (Wert) VALUES (300.50)
    INSERT INTO TESTTBL (Wert) VALUES (400.50)
    GO
    SELECT * FROM TESTTBL
    </code>
    <br>
    a) Klasse für OSColoredTextBoxColumn
    <code>
    Public Class OSColorTextBoxColumn
    Inherits DataGridTextBoxColumn
    <br>
    Protected Overloads Overrides Sub Paint(ByVal graph As Graphics, _
    ByVal rectbounds As Rectangle, ByVal curmngrSrc As _
    CurrencyManager, ByVal RowNumber As Integer, ByVal _
    ForeColorBrush As Brush, ByVal BackColorBrush As Brush, _
    ByVal AlignmentRight As Boolean)
    <br>
    Dim ObjVal As Object
    ObjVal = Me.GetColumnValueAtRow(curmngrSrc, RowNumber)
    ' eigene Behandlung
    If Not (IsNothing(ObjVal) Or IsDBNull(ObjVal)) Then
    Dim cellValue As Integer
    cellValue = CType(ObjVal, Integer)
    If (cellValue < 0) Then
    BackColorBrush = Brushes.Yellow
    ForeColorBrush = Brushes.Red
    Else
    BackColorBrush = Brushes.White
    ForeColorBrush = Brushes.Black
    End If
    End If
    ' Basisklasse übernimmt die Darstellung
    MyBase.Paint(graph, rectbounds, curmngrSrc, RowNumber, _
    BackColorBrush, ForeColorBrush, AlignmentRight)
    End Sub
    <br>
    End Class
    </code>
    b) Aufruf im Hauptformular
    <code>
    Private sMappingName As String = "TESTTBL"
    <br>
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Me.SqlDataAdapter1.Fill(Me.DataSet11, sMappingName)
    StatusBar1.Text = "DataGrid ohne eigenen TableStyle"
    End Sub
    <br>
    Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
    Dim aNewDGTS As New DataGridTableStyle()
    aNewDGTS.MappingName = sMappingName
    ' 1. Spalte = Default-DataGridTextBoxColumn
    Dim aDBTBC As New DataGridTextBoxColumn()
    aDBTBC.MappingName = "RecID"
    aDBTBC.HeaderText = "Datensatz-ID"
    aNewDGTS.GridColumnStyles.Add(aDBTBC)
    ' 2. Spalte = eigener Nachfolger von DataGridTextBoxColumn
    Dim aDBColorTBC As New OSColorTextBoxColumn()
    aDBColorTBC.MappingName = "Wert"
    aDBColorTBC.HeaderText = "Wert (in €)"
    ' Anzeige als Währung in dem Landesformat
    aDBColorTBC.Format = "c"
    aNewDGTS.GridColumnStyles.Add(aDBColorTBC)
    ' neue TableStyle-Konfiguration im DataGrid einsetzen
    DataGrid1.TableStyles.Add(aNewDGTS)
    '
    StatusBar1.Text = "OSColorTextBoxColumn ist aktiv!"
    End Sub
    </code&gt

    Comment


    • #3
      Hallo also mit C# Funktioniert das nicht so richti

      Comment

      Working...
      X