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 :

[DataGridView] Bug dans le changement de couleur d'une ligne


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 198
    Points : 106
    Points
    106
    Par défaut [DataGridView] Bug dans le changement de couleur d'une ligne
    Bonjour,

    J'affecte aux lignes de ma datagridview une couleur "jaune" lorsqu'elle a été cliquée.

    Je le fais à deux moments, à l'évènement d'un clique et dans le constructeur ( car j'ai sauvegardé ceux qui ont été cliquées auparavant).

    Cependant, dans la fonction lié à l'évènement ca fonctionne sans soucis mais la même instruction dans le constructeur ça ne modifie rien.


    Code du constructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.dGV_ListStations.Rows[i - 1].DefaultCellStyle.BackColor = Color.LightGreen;
    Code dans la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     this.dGV_ListStations.Rows[i].DefaultCellStyle.BackColor =Color.Yellow;
    J'ai bien sur essayé en remplaçant les "i" par des nombres et toujours le même résultat, dans le constructeur ça ne va pas.
    Également essayé différentes couleur. Mais le booléen "isEmpty" de la couleur est à true alors que la couleur aurait du être modifié et donc être à false.


    Quelqu'un connaitrai ce problème ou l'aurait rencontré ?

    Merci d'avance :p

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut,

    Fais le dans l'évènement Loaded plutôt que dans le constructeur .

  3. #3
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Petite question : Le constructeur dont tu parles désigne quel objet (type) ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 198
    Points : 106
    Points
    106
    Par défaut
    @ binoo : Je n'ai trouvé que l'évènement "Load" mais ca fonctionne, merci
    Et par hasard, en connaitrais tu la raison aussi ?

    @Cardi : le constructeur de ma winform, une classe partielle héritant de "Form"

  5. #5
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Tu as les données liées à ton DataGridView dès le constructeur de ta fenêtre ? Tes données se trouvent dans quoi ? DataSet/DataTable, Liste/Dictionnaire, etc ?

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 198
    Points : 106
    Points
    106
    Par défaut
    Oui je lie bien mes données avant, et ma source est une "DataTable"

    A la fin de mon constructeur, j'appelle cette fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    FillGrid() 
    {
    DataProvider.CreateConnection();
    dGV_ListStationsSelected.DataSource = BadgesTable.GetSations(idBadge);      
    dGV_ListStations.DataSource = StationsTable.Get();
    DataProvider.CloseConnection();
    UpdateColor();
    }
    UpdateColor étant la méthode qui s'occupe du coloriage

  7. #7
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Tu pourrais t'inspirer de ce code en le modifiant pour "colorer" non seulement la cellule sélectionnée, mais toute la Row correspondant à e.RowIndex( modifier Style.SelectionBackcolor & Style.BackColor).
    et pas besoin de le faire dans le constructeur
    L'exemple de code suivant montre comment gérer cet événement pour modifier la propriété SelectionBackColor de la cellule active. Dans cet exemple, la couleur d'arrière-plan de la sélection est définie dans l'événement CellEnter, puis réinitialisée à Empty sur l'événement CellLeave. Pour exécuter cet exemple, collez le code dans un formulaire qui contient un DataGridView nommé dataGridView1 et veillez à ce que tous les événements soient associés à leurs gestionnaires d'événements.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private void dataGridView1_CellEnter(object sender, 
        DataGridViewCellEventArgs e)
    {
        dataGridView1[e.ColumnIndex, e.RowIndex].Style
            .SelectionBackColor = Color.Blue;
    }
     
    private void dataGridView1_CellLeave(object sender, 
        DataGridViewCellEventArgs e)
    {
        dataGridView1[e.ColumnIndex, e.RowIndex].Style
            .SelectionBackColor = Color.Empty;
    }

  8. #8
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Pour mieux comprendre, tu veux gérer un aspect multi-select comme dans une liste de case à cocher ?
    Dans ce cas, je me tournerai plutot vers l'événement CellFormating pour modifier le style de la cellule suivant que la ligne est "cochée" ou non.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 198
    Points : 106
    Points
    106
    Par défaut
    En fait j'ai une liste d'objet, à l'affichage il y a les ligne qui ont déja été sélectionnées ( d'où le besoin d'initialiser les couleurs à l'affichage) , ensuite lorsqu'on clique sur une ligne, ça sélectionne ou déselectionne l'objet. Je suis donc en "FullRowSelect" et je ne peux que sélectionner une ligne à la fois.


    J'ai réglé le problème en appelant ma fonction de coloriage dans l'évènement "Load".

    Ca fonctionne donc mais je continue à me poser la question du pourquoi ça ne va pas dans le constructeur.

    PS : ton bout de code m'a donné une idée pour un autre problème que j'avais :p

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/02/2014, 01h34
  2. Changement de couleur d'une ligne dans un Memo
    Par andreditdd dans le forum Composants VCL
    Réponses: 8
    Dernier message: 19/08/2008, 13h47
  3. [C#][VS 2005]Changer la couleur d'une ligne dans un DataGridView
    Par Mast3rMind dans le forum Windows Forms
    Réponses: 5
    Dernier message: 13/07/2006, 23h20
  4. Changement de couleur d'une ligne d'un stringgrid/D7 perso
    Par jer64 dans le forum Composants VCL
    Réponses: 29
    Dernier message: 11/01/2006, 22h53
  5. [CSS] Probleme dans les changements de couleurs
    Par caneman dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 30/07/2005, 18h43

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