Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
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>
Comment