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

VB.NET Discussion :

Changer la couleur d'une ligne d'un Datagrid suivant un critère


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2013
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2013
    Messages : 121
    Par défaut Changer la couleur d'une ligne d'un Datagrid suivant un critère
    Bonjour

    Depuis quelques jours j'essaye de trouver une solution à mon problème par les exemples sur le Net ou par les cours. Je crois que mon problème est simple mais il y une truc qui m'échappe. J'ai une DataGrid charger, et je veux colorer des lignes selon une condition précise (j'ai une colonne nommée "DateRetraite" et je veux que tous les employer qui ont une date inférieure à la date système se marquent en Rouge (toute la ligne) et que les employer qui ont encore 6 mois avant la date système se marquent en Orangé).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      Cn.Open()
            CmdRet.CommandType = CommandType.Text
            CmdRet.CommandText = "Select TPersonnels.CNRPS, TPersonnels.PrenomPers, TPersonnels.NomPers, TPersonnels.DateNaisPers order by TPersonnels.DateRetraite ASC"
            CmdRet.Connection = Cn
            DrRet = CmdRet.ExecuteReader
            DtRet.Load(DrRet)
            DataRet.DataSource = DtRet 'Afficher la resultat de la requette dans DataGridView1
            Cn.Close()
            DataRet.Columns(0).HeaderText = "CNRPS"
            DataRet.Columns(1).HeaderText = "Nom"
            DataRet.Columns(2).HeaderText = "Prénom"
            DataRet.Columns(3).HeaderText = "DateNaissance"
            DataRet.Columns(4).HeaderText = "DateRetraite"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub DataRet_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataRet.CellFormatting
         If Me.DataRet.Rows(e.RowIndex).Cells.Item("DateRetraite").ToString= "01/01/2013" Then
                Me.DataRet.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Red
            End If
        End Sub
    Le Message d’erreur : La colonne nommée DateRetraite est introuvable.

    J'ai pris une date fixe pour tester mais sans aucune résultat.("01/01/2013")
    Je compte sur vous les brillant pour m'aider et merci.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonjour,
    le Name et le HeaderText d'une colonne peuvent être nommés différemment.
    Ici la propriété Item attend un columnName.
    A voir...

  3. #3
    Membre très actif
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2013
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2013
    Messages : 121
    Par défaut
    Bonjour chrismonoye
    J'ai nommé le champs et le HeaderText par le même nom pour éviter les erreurs de frappe. Lors de l'exécution de la requête sans chercher à changer de couleur tous marche bien et la colonne DateRetraite s'affiche bien avec les données enregistrés. tous marche bien. Mais lorsque je veux colorer des lignes suivant le critère voulue le message d'erreur apparu malgré que la colonne existe. J'ai essayé les codes suivants le même message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub DataRet_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataRet.CellFormatting
         If Me.DataRet.Rows(e.RowIndex).Cells.Item("DateRetraite").ToString= "01/01/2013" Then
                Me.DataRet.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Red
            End If
        End Sub
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub DataRet_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataRet.CellFormatting
         If Me.DataRet.Rows(e.RowIndex).Cells.("DateRetraite").ToString= "01/01/2013" Then
                Me.DataRet.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Red
            End If
        End Sub
    et avec ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub DataRet_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataRet.CellFormatting
         If Me.DataRet.Rows(e.RowIndex).Cells.Item(4).ToString= "01/01/2013" Then
                Me.DataRet.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Red
            End If
        End Sub
    le message d'erreur est : L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonsoir,
    à tester en adaptant nom de colonne et valeur recherchée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            Dim row As DataRowView = CType(DataGridView1.Rows(e.RowIndex).DataBoundItem, DataRowView)
            If Not row Is Nothing Then
                If row("Fonction").ToString = "Propriétaire" Then
                    Me.DataGridView1.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Red
                End If
            End If

  5. #5
    Membre très actif
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2013
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2013
    Messages : 121
    Par défaut
    Merci pour ta proposition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Dim row As DataRowView = CType(DataRet.Rows(e.RowIndex).DataBoundItem, DataRowView)
            If Not row Is Nothing Then
                If row("DateRetraite").ToString = "01/01/2012" Then
                    Me.DataRet.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Red
                End If
            End If
    il colore tous en rouge sans prendre compte du condition c-à-dire tous les 2011 et les 2012 or je jeux seulement les enregistrements dont la date est 01/01/2012

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonjour,
    je ne sais pas ne pouvant reproduire ce comportement.
    Peut être une conversion aléatoire de types : String <------> Date si la colonne est de type Date?
    Dans ce sens je ne rencontre pas de soucis avec un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Dim filtre As String = "24/03/2006"
            Dim dt As DateTime = Convert.ToDateTime(filtre)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            'Récupération de la ligne de données
            Dim row As DataRowView = CType(DataGridView1.Rows(e.RowIndex).DataBoundItem, DataRowView)
            If Not row Is Nothing Then
                If Convert.ToDateTime(row("Date de soumission")) = dt Then
                    Me.DataGridView1.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Red
                End If
            End If
    Ou avec ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            Dim cell As DataGridViewCell = Me.DataGridView1.Rows(e.RowIndex).Cells("Date de soumission")
            If Not cell.Value Is Nothing Then
                If Convert.ToDateTime(cell.Value) = dt Then
                    Me.DataGridView1.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Red
                End If
            End If

Discussions similaires

  1. Changer la couleur d'une ligne d'un datagrid
    Par WriteLN dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/05/2007, 19h15
  2. Changer la couleur d une ligne de tableau au survol
    Par logica dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/07/2005, 11h57
  3. Réponses: 7
    Dernier message: 28/06/2005, 11h53
  4. Réponses: 8
    Dernier message: 14/05/2004, 11h18
  5. [VB6]Changer la couleur d'une ligne d'un ListView
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 14/03/2003, 17h02

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