OVH Cloud OVH Cloud

Intercepter évènement dataGrid (Winforms)

4 réponses
Avatar
Olivier
Bonjour

En WinForms, j'utilise le DataGrid pour afficher des données d'un DataTable
Je souhaiterai changer la couleur de fond de chaque ligne en fonction de la
valeur d'une des colonnes du dataTable ?
True = Blanc
False = Rouge

En ASP.NET, on pourvait utiliser l'évènement, ItemDataBound() (ou quelque
chose du genre)

Comment faire en Winforms ?

Merci
Olivier

4 réponses

Avatar
Zoury
Salut Olivier ! :O)

Je crois que tu dois te faire des classes héritant de la classe
DataGridColumnStyle.

Je t'ai monté un "petit" exemple qui devrait te donner une idée du concept à
appliquer.

L'exemple affiche une grille contenant les nom et prénom d'employés (type
string) en plus d'une colonne qui démontre s'ils sont toujours actifs (type
booléen). Étant donné que ma grille affiche deux types de données, j'ai
créer deux nouvelles classes de style de colonne soit
DataGridColoredTextBoxColumn et DataGridColoredBoolColumn qui hérite
respectivement des classes DataGridTextBoxColumn et DataGridBoolColumn.
L'héritage de ces classes permet modifier la méthode Paint() des classes de
styles de colonne afin d'y altérer les couleurs de la ligne courante d'une
colonne donnée.

Bon je me tais avant de te faire perdre le fil... :O)

L'exemple définit 4 classes (incluant Form1) et une délégué.
(désolé pour les longues lignes.)
'***
' Classe Form1
' 1 DataGrid (DataGrid1)
Option Explicit On

Public Class Form1
Inherits System.Windows.Forms.Form

Private m_dt As DataTable
Private m_dgctbc As DataGridColoredTextBoxColumn
Private m_dgcbc As DataGridColoredBoolColumn

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

' on créer notre table de données
m_dt = CreateDataTable()
' on ajoute le style de la table à notre grille
DataGrid1.TableStyles.Add(CreateTableStyle(m_dt))
' on lie les données à notre grille
DataGrid1.DataSource = m_dt

End Sub

Private Function CreateDataTable() As DataTable

Dim dt As DataTable
Dim dc As DataColumn

' le nom de la table et les noms
' de colonnes sont employés pour le
' mapping des styles
dt = New DataTable("EMPLOYES")

' on créé trois colonnes dont une booléenne
dt.Columns.Add("NOM", GetType(String))
dt.Columns.Add("PRENOM", GetType(String))
dt.Columns.Add("ACTIF", GetType(Boolean))

' on ajoute des données tests
dt.Rows.Add(New Object() {"Lefebvre", "Yanick", True})
dt.Rows.Add(New Object() {"Durocher", "Robert", False})
dt.Rows.Add(New Object() {"Gamache", "Pierre", False})
dt.Rows.Add(New Object() {"Cardinal", "Simon", True})

' renvoit la table
Return dt

End Function

Private Function CreateTableStyle(ByVal dt As DataTable) As
DataGridTableStyle

Dim dts As DataGridTableStyle

' initialise le style de la table
dts = New DataGridTableStyle
dts.MappingName = dt.TableName

' créer le style pour la première colonne
m_dgctbc = New DataGridColoredTextBoxColumn
m_dgctbc.MappingName = dt.Columns(0).ColumnName
m_dgctbc.HeaderText = m_dgctbc.MappingName
' on branche notre ColumnStyle à l'événement DataGridColumnPaint
AddHandler m_dgctbc.DataGridColumnPaint, AddressOf
Me.DataGridColumnPaint
' ajoute le style de colonne à notre style de table
dts.GridColumnStyles.Add(m_dgctbc)

' créer le style pour la deuxième colonne
m_dgctbc = New DataGridColoredTextBoxColumn
m_dgctbc.MappingName = dt.Columns(1).ColumnName
m_dgctbc.HeaderText = m_dgctbc.MappingName
AddHandler m_dgctbc.DataGridColumnPaint, AddressOf
Me.DataGridColumnPaint
dts.GridColumnStyles.Add(m_dgctbc)

' créer le style pour la troisième colonne
m_dgcbc = New DataGridColoredBoolColumn
m_dgcbc.MappingName = dt.Columns(2).ColumnName
m_dgcbc.HeaderText = m_dgcbc.MappingName
AddHandler m_dgcbc.DataGridColumnPaint, AddressOf
Me.DataGridColumnPaint
dts.GridColumnStyles.Add(m_dgcbc)

' renvoit le style de la table
Return dts

End Function

Public Sub DataGridColumnPaint(ByVal sender As Object, ByVal args As
DataGridColumnPaintEventArgs)

' ici on vérifie la valeur du champs ACTIF pour
' la ligne en cours et affecte la couleur
' de la brosse employé par la méthode Paint()
' des DataGridColumnStyles
'
' note : mes données ne contienne pas de NULL (Nothing),
' avec des données normales il faudrait faire le
' test avant de convertir le champs.
If (CType(m_dt.Rows(args.RowNum)("ACTIF"), Boolean)) Then
args.BackBrush = Brushes.White
Else
args.BackBrush = Brushes.Salmon
End If

End Sub

End Class
'***
' Classe DataGridColumnPaintEventArgs
' définie la Delegate DataGridColumnPaintEventHandler
Option Explicit On

Imports System.Drawing

Public Delegate Sub DataGridColumnPaintEventHandler(ByVal sender As Object,
ByVal args As DataGridColumnPaintEventArgs)

Public Class DataGridColumnPaintEventArgs
Inherits EventArgs

Private m_objSource As CurrencyManager
Private m_nRowNum As Int32
Private m_objBackBrush As Brush
Private m_objForeBrush As Brush
Private m_bAlignToRight As Boolean

Public Sub New(ByVal source As CurrencyManager, _
ByVal rowNum As Int32, _
ByVal backBrush As Brush, _
ByVal foreBrush As Brush, _
ByVal alignToRight As Boolean)
m_objSource = source
m_nRowNum = rowNum
m_objBackBrush = backBrush
m_objForeBrush = foreBrush
m_bAlignToRight = alignToRight
End Sub

Public ReadOnly Property Source() As CurrencyManager
Get
Return m_objSource
End Get
End Property

Public ReadOnly Property RowNum() As Int32
Get
Return m_nRowNum
End Get
End Property

Public Property BackBrush() As Brush
Get
Return m_objBackBrush
End Get
Set(ByVal Value As Brush)
m_objBackBrush = Value
End Set
End Property

Public Property ForeBrush() As Brush
Get
Return m_objForeBrush
End Get
Set(ByVal Value As Brush)
m_objForeBrush = Value
End Set
End Property

Public Property AlignToRight() As Boolean
Get
Return m_bAlignToRight
End Get
Set(ByVal Value As Boolean)
m_bAlignToRight = Value
End Set
End Property

End Class
'***
' Classe DataGridColoredTextBoxColumn
Option Explicit On

Public Class DataGridColoredTextBoxColumn
Inherits DataGridTextBoxColumn

' événement déclenché lors d'un paint
Public Event DataGridColumnPaint As DataGridColumnPaintEventHandler

Protected Overloads Overrides Sub Paint(ByVal g As
System.Drawing.Graphics, ByVal bounds As System.Drawing.Rectangle, ByVal
source As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer,
ByVal backBrush As System.Drawing.Brush, ByVal foreBrush As
System.Drawing.Brush, ByVal alignToRight As Boolean)

Dim e As DataGridColumnPaintEventArgs

' on initialise notre classe d'arguments
e = New DataGridColumnPaintEventArgs(source, rowNum, backBrush,
foreBrush, alignToRight)

' on lève l'événement, ainsi les données BackBrush, ForeBrush et
AlignToRight
' peuvent être modifié par la classe appelante
RaiseEvent DataGridColumnPaint(Me, e)

' on passe les nouvelles valeurs à la classe de base.
MyBase.Paint(g, bounds, source, rowNum, e.BackBrush, e.ForeBrush,
e.AlignToRight)

End Sub

End Class
'***
' Classe DataGridColoredBoolColumn
Option Explicit On

Public Class DataGridColoredBoolColumn
Inherits DataGridBoolColumn

Public Event DataGridColumnPaint As DataGridColumnPaintEventHandler

Protected Overloads Overrides Sub Paint(ByVal g As
System.Drawing.Graphics, ByVal bounds As System.Drawing.Rectangle, ByVal
source As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer,
ByVal backBrush As System.Drawing.Brush, ByVal foreBrush As
System.Drawing.Brush, ByVal alignToRight As Boolean)

Dim e As DataGridColumnPaintEventArgs
e = New DataGridColumnPaintEventArgs(source, rowNum, backBrush,
foreBrush, alignToRight)
RaiseEvent DataGridColumnPaint(Me, e)
MyBase.Paint(g, bounds, source, rowNum, e.BackBrush, e.ForeBrush,
e.AlignToRight)

End Sub

End Class
'***

--
Cordialement
Yanick
MVP pour Visual Basic
"Olivier" a écrit dans le message de
news:
Bonjour

En WinForms, j'utilise le DataGrid pour afficher des données d'un


DataTable
Je souhaiterai changer la couleur de fond de chaque ligne en fonction de


la
valeur d'une des colonnes du dataTable ?
True = Blanc
False = Rouge

En ASP.NET, on pourvait utiliser l'évènement, ItemDataBound() (ou quelque
chose du genre)

Comment faire en Winforms ?

Merci
Olivier




Avatar
Zoury
(le cross-post n'a pas suivi.. désolé pour la répétition)

Salut Olivier ! :O)

Je crois que tu dois te faire des classes héritant de la classe
DataGridColumnStyle.

Je t'ai monté un "petit" exemple qui devrait te donner une idée du concept à
appliquer.

L'exemple affiche une grille contenant les nom et prénom d'employés (type
string) en plus d'une colonne qui démontre s'ils sont toujours actifs (type
booléen). Étant donné que ma grille affiche deux types de données, j'ai
créer deux nouvelles classes de style de colonne soit
DataGridColoredTextBoxColumn et DataGridColoredBoolColumn qui hérite
respectivement des classes DataGridTextBoxColumn et DataGridBoolColumn.
L'héritage de ces classes permet modifier la méthode Paint() des classes de
styles de colonne afin d'y altérer les couleurs de la ligne courante d'une
colonne donnée.

Bon je me tais avant de te faire perdre le fil... :O)

L'exemple définit 4 classes (incluant Form1) et une délégué.
(désolé pour les longues lignes.)
'***
' Classe Form1
' 1 DataGrid (DataGrid1)
Option Explicit On

Public Class Form1
Inherits System.Windows.Forms.Form

Private m_dt As DataTable
Private m_dgctbc As DataGridColoredTextBoxColumn
Private m_dgcbc As DataGridColoredBoolColumn

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

' on créer notre table de données
m_dt = CreateDataTable()
' on ajoute le style de la table à notre grille
DataGrid1.TableStyles.Add(CreateTableStyle(m_dt))
' on lie les données à notre grille
DataGrid1.DataSource = m_dt

End Sub

Private Function CreateDataTable() As DataTable

Dim dt As DataTable
Dim dc As DataColumn

' le nom de la table et les noms
' de colonnes sont employés pour le
' mapping des styles
dt = New DataTable("EMPLOYES")

' on créé trois colonnes dont une booléenne
dt.Columns.Add("NOM", GetType(String))
dt.Columns.Add("PRENOM", GetType(String))
dt.Columns.Add("ACTIF", GetType(Boolean))

' on ajoute des données tests
dt.Rows.Add(New Object() {"Lefebvre", "Yanick", True})
dt.Rows.Add(New Object() {"Durocher", "Robert", False})
dt.Rows.Add(New Object() {"Gamache", "Pierre", False})
dt.Rows.Add(New Object() {"Cardinal", "Simon", True})

' renvoit la table
Return dt

End Function

Private Function CreateTableStyle(ByVal dt As DataTable) As
DataGridTableStyle

Dim dts As DataGridTableStyle

' initialise le style de la table
dts = New DataGridTableStyle
dts.MappingName = dt.TableName

' créer le style pour la première colonne
m_dgctbc = New DataGridColoredTextBoxColumn
m_dgctbc.MappingName = dt.Columns(0).ColumnName
m_dgctbc.HeaderText = m_dgctbc.MappingName
' on branche notre ColumnStyle à l'événement DataGridColumnPaint
AddHandler m_dgctbc.DataGridColumnPaint, AddressOf
Me.DataGridColumnPaint
' ajoute le style de colonne à notre style de table
dts.GridColumnStyles.Add(m_dgctbc)

' créer le style pour la deuxième colonne
m_dgctbc = New DataGridColoredTextBoxColumn
m_dgctbc.MappingName = dt.Columns(1).ColumnName
m_dgctbc.HeaderText = m_dgctbc.MappingName
AddHandler m_dgctbc.DataGridColumnPaint, AddressOf
Me.DataGridColumnPaint
dts.GridColumnStyles.Add(m_dgctbc)

' créer le style pour la troisième colonne
m_dgcbc = New DataGridColoredBoolColumn
m_dgcbc.MappingName = dt.Columns(2).ColumnName
m_dgcbc.HeaderText = m_dgcbc.MappingName
AddHandler m_dgcbc.DataGridColumnPaint, AddressOf
Me.DataGridColumnPaint
dts.GridColumnStyles.Add(m_dgcbc)

' renvoit le style de la table
Return dts

End Function

Public Sub DataGridColumnPaint(ByVal sender As Object, ByVal args As
DataGridColumnPaintEventArgs)

' ici on vérifie la valeur du champs ACTIF pour
' la ligne en cours et affecte la couleur
' de la brosse employé par la méthode Paint()
' des DataGridColumnStyles
'
' note : mes données ne contienne pas de NULL (Nothing),
' avec des données normales il faudrait faire le
' test avant de convertir le champs.
If (CType(m_dt.Rows(args.RowNum)("ACTIF"), Boolean)) Then
args.BackBrush = Brushes.White
Else
args.BackBrush = Brushes.Salmon
End If

End Sub

End Class
'***
' Classe DataGridColumnPaintEventArgs
' définie la Delegate DataGridColumnPaintEventHandler
Option Explicit On

Imports System.Drawing

Public Delegate Sub DataGridColumnPaintEventHandler(ByVal sender As Object,
ByVal args As DataGridColumnPaintEventArgs)

Public Class DataGridColumnPaintEventArgs
Inherits EventArgs

Private m_objSource As CurrencyManager
Private m_nRowNum As Int32
Private m_objBackBrush As Brush
Private m_objForeBrush As Brush
Private m_bAlignToRight As Boolean

Public Sub New(ByVal source As CurrencyManager, _
ByVal rowNum As Int32, _
ByVal backBrush As Brush, _
ByVal foreBrush As Brush, _
ByVal alignToRight As Boolean)
m_objSource = source
m_nRowNum = rowNum
m_objBackBrush = backBrush
m_objForeBrush = foreBrush
m_bAlignToRight = alignToRight
End Sub

Public ReadOnly Property Source() As CurrencyManager
Get
Return m_objSource
End Get
End Property

Public ReadOnly Property RowNum() As Int32
Get
Return m_nRowNum
End Get
End Property

Public Property BackBrush() As Brush
Get
Return m_objBackBrush
End Get
Set(ByVal Value As Brush)
m_objBackBrush = Value
End Set
End Property

Public Property ForeBrush() As Brush
Get
Return m_objForeBrush
End Get
Set(ByVal Value As Brush)
m_objForeBrush = Value
End Set
End Property

Public Property AlignToRight() As Boolean
Get
Return m_bAlignToRight
End Get
Set(ByVal Value As Boolean)
m_bAlignToRight = Value
End Set
End Property

End Class
'***
' Classe DataGridColoredTextBoxColumn
Option Explicit On

Public Class DataGridColoredTextBoxColumn
Inherits DataGridTextBoxColumn

' événement déclenché lors d'un paint
Public Event DataGridColumnPaint As DataGridColumnPaintEventHandler

Protected Overloads Overrides Sub Paint(ByVal g As
System.Drawing.Graphics, ByVal bounds As System.Drawing.Rectangle, ByVal
source As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer,
ByVal backBrush As System.Drawing.Brush, ByVal foreBrush As
System.Drawing.Brush, ByVal alignToRight As Boolean)

Dim e As DataGridColumnPaintEventArgs

' on initialise notre classe d'arguments
e = New DataGridColumnPaintEventArgs(source, rowNum, backBrush,
foreBrush, alignToRight)

' on lève l'événement, ainsi les données BackBrush, ForeBrush et
AlignToRight
' peuvent être modifié par la classe appelante
RaiseEvent DataGridColumnPaint(Me, e)

' on passe les nouvelles valeurs à la classe de base.
MyBase.Paint(g, bounds, source, rowNum, e.BackBrush, e.ForeBrush,
e.AlignToRight)

End Sub

End Class
'***
' Classe DataGridColoredBoolColumn
Option Explicit On

Public Class DataGridColoredBoolColumn
Inherits DataGridBoolColumn

Public Event DataGridColumnPaint As DataGridColumnPaintEventHandler

Protected Overloads Overrides Sub Paint(ByVal g As
System.Drawing.Graphics, ByVal bounds As System.Drawing.Rectangle, ByVal
source As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer,
ByVal backBrush As System.Drawing.Brush, ByVal foreBrush As
System.Drawing.Brush, ByVal alignToRight As Boolean)

Dim e As DataGridColumnPaintEventArgs
e = New DataGridColumnPaintEventArgs(source, rowNum, backBrush,
foreBrush, alignToRight)
RaiseEvent DataGridColumnPaint(Me, e)
MyBase.Paint(g, bounds, source, rowNum, e.BackBrush, e.ForeBrush,
e.AlignToRight)

End Sub

End Class
'***

--
Cordialement
Yanick
MVP pour Visual Basic
"Olivier" a écrit dans le message de
news:
Bonjour

En WinForms, j'utilise le DataGrid pour afficher des données d'un


DataTable
Je souhaiterai changer la couleur de fond de chaque ligne en fonction de


la
valeur d'une des colonnes du dataTable ?
True = Blanc
False = Rouge

En ASP.NET, on pourvait utiliser l'évènement, ItemDataBound() (ou quelque
chose du genre)

Comment faire en Winforms ?

Merci
Olivier




Avatar
Olivier
Houa !!

merci pour cette énorme réponse :-)

C'est dommage que MS n'est pas prévu quelque chose de plus simple :-(
ils l'ont bien fait en WebForms ?

Ou alors, il font exprès pour obliger d'acheter des composant et ne pas
casser le marché ?

Merci pour ta réponse
Olivier



"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
Salut Olivier ! :O)

Je crois que tu dois te faire des classes héritant de la classe
DataGridColumnStyle.

Je t'ai monté un "petit" exemple qui devrait te donner une idée du concept
à
appliquer.

L'exemple affiche une grille contenant les nom et prénom d'employés (type
string) en plus d'une colonne qui démontre s'ils sont toujours actifs
(type
booléen). Étant donné que ma grille affiche deux types de données, j'ai
créer deux nouvelles classes de style de colonne soit
DataGridColoredTextBoxColumn et DataGridColoredBoolColumn qui hérite
respectivement des classes DataGridTextBoxColumn et DataGridBoolColumn.
L'héritage de ces classes permet modifier la méthode Paint() des classes
de
styles de colonne afin d'y altérer les couleurs de la ligne courante d'une
colonne donnée.

Bon je me tais avant de te faire perdre le fil... :O)

L'exemple définit 4 classes (incluant Form1) et une délégué.
(désolé pour les longues lignes.)
'***
' Classe Form1
' 1 DataGrid (DataGrid1)
Option Explicit On

Public Class Form1
Inherits System.Windows.Forms.Form

Private m_dt As DataTable
Private m_dgctbc As DataGridColoredTextBoxColumn
Private m_dgcbc As DataGridColoredBoolColumn

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

' on créer notre table de données
m_dt = CreateDataTable()
' on ajoute le style de la table à notre grille
DataGrid1.TableStyles.Add(CreateTableStyle(m_dt))
' on lie les données à notre grille
DataGrid1.DataSource = m_dt

End Sub

Private Function CreateDataTable() As DataTable

Dim dt As DataTable
Dim dc As DataColumn

' le nom de la table et les noms
' de colonnes sont employés pour le
' mapping des styles
dt = New DataTable("EMPLOYES")

' on créé trois colonnes dont une booléenne
dt.Columns.Add("NOM", GetType(String))
dt.Columns.Add("PRENOM", GetType(String))
dt.Columns.Add("ACTIF", GetType(Boolean))

' on ajoute des données tests
dt.Rows.Add(New Object() {"Lefebvre", "Yanick", True})
dt.Rows.Add(New Object() {"Durocher", "Robert", False})
dt.Rows.Add(New Object() {"Gamache", "Pierre", False})
dt.Rows.Add(New Object() {"Cardinal", "Simon", True})

' renvoit la table
Return dt

End Function

Private Function CreateTableStyle(ByVal dt As DataTable) As
DataGridTableStyle

Dim dts As DataGridTableStyle

' initialise le style de la table
dts = New DataGridTableStyle
dts.MappingName = dt.TableName

' créer le style pour la première colonne
m_dgctbc = New DataGridColoredTextBoxColumn
m_dgctbc.MappingName = dt.Columns(0).ColumnName
m_dgctbc.HeaderText = m_dgctbc.MappingName
' on branche notre ColumnStyle à l'événement DataGridColumnPaint
AddHandler m_dgctbc.DataGridColumnPaint, AddressOf
Me.DataGridColumnPaint
' ajoute le style de colonne à notre style de table
dts.GridColumnStyles.Add(m_dgctbc)

' créer le style pour la deuxième colonne
m_dgctbc = New DataGridColoredTextBoxColumn
m_dgctbc.MappingName = dt.Columns(1).ColumnName
m_dgctbc.HeaderText = m_dgctbc.MappingName
AddHandler m_dgctbc.DataGridColumnPaint, AddressOf
Me.DataGridColumnPaint
dts.GridColumnStyles.Add(m_dgctbc)

' créer le style pour la troisième colonne
m_dgcbc = New DataGridColoredBoolColumn
m_dgcbc.MappingName = dt.Columns(2).ColumnName
m_dgcbc.HeaderText = m_dgcbc.MappingName
AddHandler m_dgcbc.DataGridColumnPaint, AddressOf
Me.DataGridColumnPaint
dts.GridColumnStyles.Add(m_dgcbc)

' renvoit le style de la table
Return dts

End Function

Public Sub DataGridColumnPaint(ByVal sender As Object, ByVal args As
DataGridColumnPaintEventArgs)

' ici on vérifie la valeur du champs ACTIF pour
' la ligne en cours et affecte la couleur
' de la brosse employé par la méthode Paint()
' des DataGridColumnStyles
'
' note : mes données ne contienne pas de NULL (Nothing),
' avec des données normales il faudrait faire le
' test avant de convertir le champs.
If (CType(m_dt.Rows(args.RowNum)("ACTIF"), Boolean)) Then
args.BackBrush = Brushes.White
Else
args.BackBrush = Brushes.Salmon
End If

End Sub

End Class
'***
' Classe DataGridColumnPaintEventArgs
' définie la Delegate DataGridColumnPaintEventHandler
Option Explicit On

Imports System.Drawing

Public Delegate Sub DataGridColumnPaintEventHandler(ByVal sender As
Object,
ByVal args As DataGridColumnPaintEventArgs)

Public Class DataGridColumnPaintEventArgs
Inherits EventArgs

Private m_objSource As CurrencyManager
Private m_nRowNum As Int32
Private m_objBackBrush As Brush
Private m_objForeBrush As Brush
Private m_bAlignToRight As Boolean

Public Sub New(ByVal source As CurrencyManager, _
ByVal rowNum As Int32, _
ByVal backBrush As Brush, _
ByVal foreBrush As Brush, _
ByVal alignToRight As Boolean)
m_objSource = source
m_nRowNum = rowNum
m_objBackBrush = backBrush
m_objForeBrush = foreBrush
m_bAlignToRight = alignToRight
End Sub

Public ReadOnly Property Source() As CurrencyManager
Get
Return m_objSource
End Get
End Property

Public ReadOnly Property RowNum() As Int32
Get
Return m_nRowNum
End Get
End Property

Public Property BackBrush() As Brush
Get
Return m_objBackBrush
End Get
Set(ByVal Value As Brush)
m_objBackBrush = Value
End Set
End Property

Public Property ForeBrush() As Brush
Get
Return m_objForeBrush
End Get
Set(ByVal Value As Brush)
m_objForeBrush = Value
End Set
End Property

Public Property AlignToRight() As Boolean
Get
Return m_bAlignToRight
End Get
Set(ByVal Value As Boolean)
m_bAlignToRight = Value
End Set
End Property

End Class
'***
' Classe DataGridColoredTextBoxColumn
Option Explicit On

Public Class DataGridColoredTextBoxColumn
Inherits DataGridTextBoxColumn

' événement déclenché lors d'un paint
Public Event DataGridColumnPaint As DataGridColumnPaintEventHandler

Protected Overloads Overrides Sub Paint(ByVal g As
System.Drawing.Graphics, ByVal bounds As System.Drawing.Rectangle, ByVal
source As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer,
ByVal backBrush As System.Drawing.Brush, ByVal foreBrush As
System.Drawing.Brush, ByVal alignToRight As Boolean)

Dim e As DataGridColumnPaintEventArgs

' on initialise notre classe d'arguments
e = New DataGridColumnPaintEventArgs(source, rowNum, backBrush,
foreBrush, alignToRight)

' on lève l'événement, ainsi les données BackBrush, ForeBrush et
AlignToRight
' peuvent être modifié par la classe appelante
RaiseEvent DataGridColumnPaint(Me, e)

' on passe les nouvelles valeurs à la classe de base.
MyBase.Paint(g, bounds, source, rowNum, e.BackBrush, e.ForeBrush,
e.AlignToRight)

End Sub

End Class
'***
' Classe DataGridColoredBoolColumn
Option Explicit On

Public Class DataGridColoredBoolColumn
Inherits DataGridBoolColumn

Public Event DataGridColumnPaint As DataGridColumnPaintEventHandler

Protected Overloads Overrides Sub Paint(ByVal g As
System.Drawing.Graphics, ByVal bounds As System.Drawing.Rectangle, ByVal
source As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer,
ByVal backBrush As System.Drawing.Brush, ByVal foreBrush As
System.Drawing.Brush, ByVal alignToRight As Boolean)

Dim e As DataGridColumnPaintEventArgs
e = New DataGridColumnPaintEventArgs(source, rowNum, backBrush,
foreBrush, alignToRight)
RaiseEvent DataGridColumnPaint(Me, e)
MyBase.Paint(g, bounds, source, rowNum, e.BackBrush, e.ForeBrush,
e.AlignToRight)

End Sub

End Class
'***

--
Cordialement
Yanick
MVP pour Visual Basic
"Olivier" a écrit dans le message de
news:
Bonjour

En WinForms, j'utilise le DataGrid pour afficher des données d'un


DataTable
Je souhaiterai changer la couleur de fond de chaque ligne en fonction de


la
valeur d'une des colonnes du dataTable ?
True = Blanc
False = Rouge

En ASP.NET, on pourvait utiliser l'évènement, ItemDataBound() (ou quelque
chose du genre)

Comment faire en Winforms ?

Merci
Olivier








Avatar
Zoury
Hehe ! :O)

Bien que relativement plus complexe, le DataGrid sous .NET offre beaucoup
plus de flexibilité et de possibilité que son prédécesseur.. j'imagine que
MS nous ont donné les outils nécessaires et nous laisse faire le reste...
:O/

--
Cordialement
Yanick
MVP pour Visual Basic