Announcement

Collapse
No announcement yet.

DataGrid und einzelne Felder farbig

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

  • DataGrid und einzelne Felder farbig

    Hallo Entwickler-Gemeinde,

    ich hätte mal wieder eine recht wichtige frage an euch:
    Wie kann man in einem DataGrid in abhängigkeit vom Feldinhalt (z. B. "i.O", "n.i.O") die FoureGroundColor nur dieses einzigen Feldes setzen?
    Für jede Hilfe wäre ich dankbar.

    Schon mal vielen Dank im Voraus.

    Gruss
    Andy

  • #2
    Hallo,

    das DataGrid sieht dafür die so genannten <b>Table Styles</b> vor.

    Schritt 1: Eigenen Nachfolger von <b>DataGridTextBoxColumn</b> schreiben (zusätzliche Class-Datei im Projekt oder in separater Assembly). Mein Beispiel färbt in der überschriebenen (geerbten) Methode <b>Paint</b> negative Werte mit roter Schrift auf gelben Hintergrund ein.

    <pre>
    Public Class OSColorTextBoxColumn
    Inherits DataGridTextBoxColumn

    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)

    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

    End Class

    </pre>

    Schritt 2: Eigenen Table Style aktivieren:

    <pre>
    Private Sub SetTableStyle(ByVal aGrid As DataGrid, ByVal aDT As DataTable)
    Dim aDGTS As New DataGridTableStyle
    aDGTS.MappingName = aDT.TableName
    Dim j As Integer
    For j = 0 To aDT.Columns.Count - 1
    Dim aOSCTBC As New OSColorTextBoxColumn
    aOSCTBC.MappingName = aDT.Columns(j).ColumnName
    aOSCTBC.HeaderText = aDT.Columns(j).ColumnName
    aDGTS.GridColumnStyles.Add(aOSCTBC)
    Next j
    aGrid.TableStyles.Clear()
    aGrid.TableStyles.Add(aDGTS)
    End Sub

    Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Me.SqlDataAdapter1.Fill(Me.DataSet11)
    SetTableStyle(Me.DataGrid1, Me.DataSet11.TESTTBL)
    End Sub

    </pre&gt

    Comment


    • #3
      Vielen Dank Herr Kosch

      Comment


      • #4
        Hallo Herr Kosch,

        das Programm funktioniert zwar fehlerfrei, doch es wird nichts eingefärbt. Da ich mit DataSets arbeite habe ich folgendes codiert:

        Dies ist die Übergabe aus dem BtnClick-Ereignis:
        <PRE>
        DataGrid1.DataSource = MyDataSet
        DataGrid1.DataMember = "TEST"
        DataGrid1.SetDataBinding(MyDataSet, "TEST")
        SetTableStyle(Me.DataGrid1, Me.MyDataSet)
        </PRE>

        Die Routine SetTableStyle schaut bei mir folgendermaßen aus:
        <PRE>
        Private Sub SetTableStyle(ByVal aGrid As DataGrid, ByVal aDS As DataSet)
        Dim aDGTS As New DataGridTableStyle
        aDGTS.MappingName = "TEST"

        Dim aMyTBC As New MyDataGridTextBoxColumn
        aMyTBC.MappingName = "NurText"
        aMyTBC.HeaderText = "NurText"
        aDGTS.GridColumnStyles.Add(aMyTBC)

        Dim aMyTBC2 As New MyDataGridTextBoxColumn
        aMyTBC.MappingName = "Zahlen"
        aMyTBC.HeaderText = "Zahlen"
        aDGTS.GridColumnStyles.Add(aMyTBC2)
        End Sub
        </PRE>

        Ich hoffe Sie könne mir nochmals weiterhelfen.

        mfg
        And

        Comment


        • #5
          Hallo,

          der Aufruf von <i>aGrid.TableStyles.Add(aDGTS)</i> fehlt am Ende

          Comment


          • #6
            Danke Herr Kosch. Jetzt funktioniert es fehlerfrei. Den Fehler hab ich ganz und gar übersehen.

            mfg And

            Comment

            Working...
            X