IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[VB.NET] [Forms] Modifier le fond d'une ligne


Sujet :

Windows Forms

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Points : 139
    Points
    139
    Par défaut [VB.NET] [Forms] Modifier le fond d'une ligne
    Bonjour,

    J'aimerais savoir s'il existe un moyen de modifier la couleur de fond d'une ligne d'un datagrid en fonction d'une valeur dans une datarow ...

    Au pire, la police ...

    Merci d'avance !

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 52
    Points : 51
    Points
    51
    Par défaut
    Bon ben ta de la chance parceque moi j'ai mis des jours a trouver ca!!!

    Créer la classe « DataGridFormatCellEventArgs » :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    Option Strict OffOption Explicit On Imports Microsoft.VisualBasicImports SystemImports System.DrawingPublic Class DataGridFormatCellEventArgs    Inherits EventArgs    Private _column As Integer    Private _row As Integer    Private _font As Font    
    Private _backBrush As Brush    
    Private _foreBrush As Brush    
    Private _useBaseClassDrawing As Boolean       
    Public Sub New(ByVal row As Integer, ByVal col As Integer, ByVal font1 As Font, ByVal backBrush As Brush, ByVal foreBrush As Brush)                 
    MyBase.New()
           _row = row
           _column = col
           _font = font1
           _backBrush = backBrush
           _foreBrush = foreBrush     
           _useBaseClassDrawing = False
    End Sub
     
    Public Property Column() As Integer
            Get
               Return _column
            End Get
     
            Set(ByVal Value As Integer)
                _column = Value
            End Set
        End Property
        Public Property Row() As Integer
            Get
                Return _row
            End Get
            Set(ByVal Value As Integer)
                _row = Value
            End Set
        End Property
        Public Property TextFont() As Font
            Get
                Return _font
            End Get
            Set(ByVal Value As Font)
                _font = Value
            End Set
        End Property
        Public Property BackBrush() As Brush
            Get
                Return _backBrush
            End Get
            Set(ByVal Value As Brush)
                _backBrush = Value
            End Set
        End Property
        Public Property ForeBrush() As Brush
            Get
                Return _foreBrush
            End Get
            Set(ByVal Value As Brush)
                _foreBrush = Value
            End Set
        End Property
        Public Property UseBaseClassDrawing() As Boolean
            Get
                Return _useBaseClassDrawing
            End Get
            Set(ByVal Value As Boolean)
                _useBaseClassDrawing = Value
            End Set
        End Property
    End Class
    Puis ensuite créer cette procédure dans la code de votre Form Principale. C’est elle qui va créer les « ColumnStyles » nécessaires.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Public Sub AddCellFormattingColumnStyles(ByVal DataGridCible As DataGrid, ByVal handler As FormatCellEventHandler)
            Dim monTableStyle As DataGridTableStyle
            Dim maDataTable As DataTable
            Dim j As Integer
            j = 0
            monTableStyle = New DataGridTableStyle
            maDataTable = CType(DataGridCible.DataSource, DataTable)        monTableStyle.MappingName = maDataTable.TableName
            Do While (j < maDataTable.Columns.Count)
                Dim maColonne As DataGridFormattableTextBoxColumn            maColonne = New DataGridFormattableTextBoxColumn(j)            maColonne.MappingName = maDataTable.Columns(j).ColumnName
                maColonne.HeaderText = maDataTable.Columns(j).ColumnName
                AddHandler maColonne.SetCellFormat, handler            monTableStyle.GridColumnStyles.Add(maColonne)
                j = (j + 1)
            Loop
            DataGridCible.TableStyles.Clear()        DataGridCible.TableStyles.Add(monTableStyle)
        End Sub
    Il faut ensuite créer une nouvelle classe « DataGridFormattableTextBoxColumn » qui va surcharger la méthode « Paint » :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    Option Strict OffOption Explicit On Imports Microsoft.VisualBasicImports SystemImports System.DrawingImports System.Windows.FormsPublic Class DataGridFormattableTextBoxColumn
        Inherits DataGridTextBoxColumn
        Private _col As Integer
            Public Sub New(ByVal col As Integer)
            MyBase.New()
            _col = col
        End Sub
     
        Public Event SetCellFormat As FormatCellEventHandler
        Protected Overloads Overrides Sub Paint(ByVal g As Graphics, ByVal bounds As    Rectangle, ByVal source As CurrencyManager, ByVal rowNum As Integer, ByVal backBrush As Brush, ByVal foreBrush As Brush, ByVal alignToRight As Boolean)
            Dim e As DataGridFormatCellEventArgs
            e = New DataGridFormatCellEventArgs(rowNum, Me._col, Me.DataGridTableStyle.DataGrid.Font, backBrush, foreBrush)
            RaiseEvent SetCellFormat(Me, e)
            If e.UseBaseClassDrawing Then
                MyBase.Paint(g, bounds, source, rowNum, backBrush, foreBrush, alignToRight)
            Else
                g.FillRectangle(e.BackBrush, bounds)
                g.DrawString(Me.GetColumnValueAtRow(source, rowNum).ToString, e.TextFont, e.ForeBrush, bounds.X, bounds.Y)
            End If
            If (e.TextFont Is Me.DataGridTableStyle.DataGrid.Font) = False Then
                e.TextFont.Dispose()
            End If
        End Sub
     
        Protected Overloads Overrides Sub Edit(ByVal source As CurrencyManager, ByVal rowNum As Integer, ByVal bounds As Rectangle, ByVal [readOnly] As Boolean, ByVal instantText As String, ByVal cellIsVisible As Boolean)
            'Pour rendre les cellules non-éditable
            MyBase.Edit(source, rowNum, bounds, [readOnly], instantText, cellIsVisible)
        End SubEnd Class
    Il faut aussi créer une classe « FormatCellEventHandler» :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Option Strict OffOption Explicit On Imports Microsoft.VisualBasicImports SystemPublic Delegate Sub FormatCellEventHandler(ByVal sender As Object, ByVal e As DataGridFormatCellEventArgs)
     
    Il ne reste plus qu’à créer la fonction « FormatGridCellsNomDuDataGrid » dans le code de la Form Principale:
     
    Public Sub FormatGridCellsNomDuDataGrid(ByVal sender As Object, ByVal e As DataGridFormatCellEventArgs)
            Dim maDataTable As DataTable
            Dim monObjet As Object
            Dim Chaine As String
            maDataTable = CType(NomDuDataGrid.DataSource, DataTable)
            monObjet = NomDuDataGrid (e.Row, _NumCol)
            Chaine = StrConv(monObjet, VbStrConv.UpperCase)
            If Chaine Like "SELEC" Then
                e.BackBrush = Brushes.DodgerBlue
            End IfEnd Sub
    Il ne reste plus qu’à créer un TableStyle dans le code de votre Form Principale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'Création des styles des tables et des colonnes pour Overides Paint(couleur cellules)
    monTableStyle.MappingName = "Table"NomDuDataGrid.TableStyles.Add(monTableStyle)NomDuDataGrid.DataSource = monDataSet.Tables(0)
    'Pour mettre en couleur les lignes de la table
    AddCellFormattingColumnStyles(NomDuDataGrid, New FormatCellEventHandler (AddressOf FormatGridCellsNomDuDataGrid))
    Voila bon courage j'ai pas le temps de t'expliquer plus, j'espère que ca suffira

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Points : 139
    Points
    139
    Par défaut
    Merci

    Dans le même temps, j'ai trouvé cela !
    la même chose avec l'explication

    http://www.syncfusion.com/FAQ/WinForms/FAQ_c44c.asp#q745q

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 52
    Points : 51
    Points
    51
    Par défaut
    C'est la que je l'avais trouvé mais j'avais un petit bout de temps avant d'arriver a l'adapter (je suis encore novice en VB.Net)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. modifier la couleur de fond d'une ligne de gridview
    Par falifalibe2 dans le forum ASP.NET
    Réponses: 0
    Dernier message: 16/02/2010, 08h50
  2. [VB.NET][DataGridView]:couleur de fond d'une cellule
    Par BigTicket42 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 13/05/2008, 22h07
  3. [JTable] Modifier la couleur de fond d'une ligne
    Par joes_bushi dans le forum Composants
    Réponses: 2
    Dernier message: 20/09/2005, 12h13
  4. [VB.NET] [DataGrid] recuperer l'index d'une ligne
    Par graphicsxp dans le forum Windows Forms
    Réponses: 12
    Dernier message: 29/03/2005, 15h13
  5. [C#] [DataGrid] Modifier la couleur d'une ligne
    Par nalaya dans le forum Windows Forms
    Réponses: 4
    Dernier message: 27/08/2004, 12h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo