Colore cella datagrid

lunedì 27 dicembre 2004 - 13.06

ale_cincischio Profilo | Newbie

Salve a tutti. Ho un problema. Ho un datagrid di una windows form nel quale la 3 colonna deve cambiare colore in base al valore in essa contenuto. Questo già funziona. Il problema è cambiare il colore alle celle precedenti e successive. Come posso fare?
Grazie mille,
Alessio.

francescox78 Profilo | Junior Member

Mi spiace ma so che per un DataGrid di un windows form non si puòcambiare lo sfondo di una particolare cella o colonna.

Brainkiller Profilo | Guru

Che io sappia per fare queste cose, devi creare una nuova classa derivata dalla DataGrid principale e fare un override del metodo Paint. In questo modo puoi gestire tu il Repaint di ogni cella/riga e cololarla a tuo piacimento in base a condizioni che definisci tu.
Certo non è facilissimo.

ciao
david

ale_cincischio Profilo | Newbie

vero, ho letto un pò di documentazione sul paint e ci sono riuscito.
Grazie mille

francescox78 Profilo | Junior Member

Ale,
potresti scrivere il codice che ti ha permesso di cambiare il colore allo sfondo, poichè non è così immediato come implementazione, daresti una mano a tanta gente... compreso me.

Francesco.

ale_cincischio Profilo | Newbie

Mi sembra giusto.
Questa classe che posto riesce a cambiare il colore ad una singola cella di un datagrid in base al valore contenuto in essa.

Public Class ColoredTextBoxColumn
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)

If Not (IsNothing(ObjVal) Or IsDBNull(ObjVal)) Then

'codice personalizzato. In questo caso la cella diventa gialla se il valore della cella stessa è maggiore
'di 1

Dim cellValue As Integer
cellValue = CType(ObjVal, Integer)
If (cellValue > 1) Then
BackColorBrush = Brushes.Yellow
ForeColorBrush = Brushes.Red
Else
BackColorBrush = Brushes.White
ForeColorBrush = Brushes.Black
End If
End If

' Chiama Paint dalla classe base per
' compiere le operazioni di disegno vere e proprie.
MyBase.Paint(graph, rectbounds, curmngrSrc, RowNumber, _
BackColorBrush, ForeColorBrush, AlignmentRight)
End Sub
End class


Una volta fatta la classe, dall'esterno ho dichiarato una variabile istanziandola così:

dim prova as new ColoredTextBoxColumn
With prova
.HeaderText = "campo di prova"
.MappingName = "nome_del_campo_nel_database"
.ReadOnly = True
.Width = 80
End With

e l'ho agganciato in un tablestyle. Ed il gioco è fatto.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5