Bonjour
En WinForms, j'utilise le DataGrid pour afficher des données d'un
Je souhaiterai changer la couleur de fond de chaque ligne en fonction de
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
Bonjour
En WinForms, j'utilise le DataGrid pour afficher des données d'un
Je souhaiterai changer la couleur de fond de chaque ligne en fonction de
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
Bonjour
En WinForms, j'utilise le DataGrid pour afficher des données d'un
Je souhaiterai changer la couleur de fond de chaque ligne en fonction de
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
Bonjour
En WinForms, j'utilise le DataGrid pour afficher des données d'un
Je souhaiterai changer la couleur de fond de chaque ligne en fonction de
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
Bonjour
En WinForms, j'utilise le DataGrid pour afficher des données d'un
Je souhaiterai changer la couleur de fond de chaque ligne en fonction de
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
Bonjour
En WinForms, j'utilise le DataGrid pour afficher des données d'un
Je souhaiterai changer la couleur de fond de chaque ligne en fonction de
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
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
DataTableJe souhaiterai changer la couleur de fond de chaque ligne en fonction de
lavaleur 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
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" <aa@aa.fr> a écrit dans le message de
news:eTUKrKGYFHA.3864@TK2MSFTNGP10.phx.gbl...
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
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
DataTableJe souhaiterai changer la couleur de fond de chaque ligne en fonction de
lavaleur 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