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

Dotnet Discussion :

Couleur ligne datagridview en fn donnée


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut Couleur ligne datagridview en fn donnée
    Bonjour,

    Mon datagridView est bindé sur 1 dataset.
    1 colonne contient 1 nombre.
    Je voudrais que toutes les lignes soient écrites en vert ou en rouge en fonction que ce nombre est positif ou négatif.

    Je connais la solution consistant à faire 1 boucle sur toutes les lignes et changer la couleur en fonction du nombre, mais c'est trop lent.
    Comment faire ?

    J'imagine que la question a été posée 1000 fois mais j'ai passé 8 heures a chercher et j'ai rien trouvé.
    Est-ce que le DataGrid de WPF apporterait 1 solution ?

    merci pour votre aide.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    La méthode la plus simple est d'utiliser l'évènement CellFormatting.
    Par exemple :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
            {
                DataRowView drv = dataGridView1.Rows[e.RowIndex].DataBoundItem as DataRowView;
                if (drv != null)
                {
                    int stock = Convert.ToInt32(drv["Stock"]);
                    if (stock > 0)
                        e.CellStyle.BackColor = Color.Green;
                    else
                        e.CellStyle.BackColor = Color.Red;
                }
            }

    En fait ça permet même de gérer la couleur de fond par cellule, et pas seulement par ligne (quoi que dans mon exemple ça fait la même chose pour toutes les cellules de la ligne...)

    En WPF ça aurait effectivement été un peu plus "naturel"... mais d'un autre côté le contrôle de grille fourni avec WPF a beaucoup moins de fonctionnalités que le DataGridView de Windows Forms. Et si c'est une application déjà bien avancée, ça ne vaut pas le coup de passer à WPF juste pour ça.

  3. #3
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut
    Merci beaucoup Tomlev...je vais tester.

    J'aimerais bien connaitre la solution WPF pour ma culture personnelle...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par bib34690 Voir le message
    J'aimerais bien connaitre la solution WPF pour ma culture personnelle...
    Le plus simple serait d'affecter au ListView un ItemContainerStyle qui définit la couleur :
    Code XML : 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
            <ListView ItemsSource="{Binding produits}">
                <ListView.View>
                    <GridView>
                        <GridViewColumn DisplayMemberBinding="{Binding NomProduit}" Header="Produit"/>
                        <GridViewColumn DisplayMemberBinding="{Binding Prix}" Header="Prix unitaire"/>
                        <GridViewColumn DisplayMemberBinding="{Binding Stock}" Header="Quantité en stock"/>
                    </GridView>
                </ListView.View>
                <ListView.ItemContainerStyle>
                    <Style TargetType="ListViewItem">
                        <Setter Property="Background">
                            <Setter.Value>
                                <SolidColorBrush Color="{Binding Couleur}"/>
                                <!-- ou encore :
                                <SolidColorBrush Color="{Binding Stock, Converter={StaticResource stockToColorConverter}}"/>
                                -->
                            </Setter.Value>
                        </Setter>
                    </Style>
                </ListView.ItemContainerStyle>
            </ListView>

  5. #5
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut
    Je crois comprendre la méthode avec le converter : il me faudra créer la fonction "stockToColorConverter" qui retourne la couleur.

    Dans l'autre méthode, je ne comprends pas comment est affecté "Couleur" ?

    Dis moi aussi si j'ai bien compris :
    - En Winform c'est au moment du dessin qu'on colorie, ce qui risque de laguer un peu quand on bouge les ascenseurs, lors de tris...
    - En WPF on joue sur le style de la ligne au moment du remplissage, donc on n'exécute plus le code de gestion des couleurs lors des reaffichages...

    merci pour ton aide précieuse.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par bib34690 Voir le message
    Je crois comprendre la méthode avec le converter : il me faudra créer la fonction "stockToColorConverter" qui retourne la couleur.
    Pas une fonction
    Il faut créer une classe (StockToColorConverter par exemple) qui implémente IValueConverter, et créer une instance de cette classe en ressource :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <my:StockToColorConverter x:Key="stockToColorConverter"/>

    Citation Envoyé par bib34690 Voir le message
    Dans l'autre méthode, je ne comprends pas comment est affecté "Couleur" ?
    C'est juste en supposant que l'objet source ait une propriété Couleur qui aurait déjà la bonne valeur...

    Citation Envoyé par bib34690 Voir le message
    - En Winform c'est au moment du dessin qu'on colorie, ce qui risque de laguer un peu quand on bouge les ascenseurs, lors de tris...
    Pas au moment du dessin, mais au moment où le DataGridView "calcule" le texte à afficher pour une valeur donnée.

    Citation Envoyé par bib34690 Voir le message
    - En WPF on joue sur le style de la ligne au moment du remplissage, donc on n'exécute plus le code de gestion des couleurs lors des reaffichages...
    C'est réévalué si la valeur change (via le mécanisme du binding)

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

Discussions similaires

  1. [VB.net] Changer couleur ligne DataGrid
    Par bguihal dans le forum Windows Forms
    Réponses: 7
    Dernier message: 22/07/2016, 07h54
  2. Couleur ligne DataGridView
    Par Labotrain dans le forum VB.NET
    Réponses: 3
    Dernier message: 16/11/2011, 16h31
  3. Réponses: 3
    Dernier message: 28/09/2008, 16h41
  4. Comment changer la couleur d'une Ligne DATAGRIDVIEW ?
    Par mehdiyou dans le forum VB.NET
    Réponses: 1
    Dernier message: 07/04/2008, 14h43
  5. changer couleur ligne DatagridView
    Par bib34690 dans le forum Framework .NET
    Réponses: 6
    Dernier message: 04/05/2007, 13h03

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