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

C# Discussion :

C# Windows Form masquer ligne selon condition


Sujet :

C#

  1. #1
    Membre averti Avatar de BRUNO71
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 502
    Points : 319
    Points
    319
    Par défaut C# Windows Form masquer ligne selon condition
    Bonjour à vous,

    Je n'arrive pas à trouver une solution pour aficher ou masquer une ou des lignes selon critère.
    J'ai dans un DataGridview un code déjà fonctionnel pour colorier des lignes selon une condition, voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if (DGV_Matable["Date_D1", e.RowIndex].Value.ToString() == "")
                {
                    DGV_Tble_MES.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
                }
                else
                {
     
                    DGV_Matable.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.LightGreen;
     
                }
    Maintenant est-il possible de masquer les lignes dans cette exemple ?

    La cerise sur le cadeau serait de mettre le code dans une case à cocher...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
      private void CBO_Tri_CheckedChanged(object sender, EventArgs e)
            {
                // ici le code pour masquer ou afficher les lignes verte 
            }
    En toute honneté je n'ai rien trouver sur la toile..
    Merci à vous,
    Bruno

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Bonjour,
    il suffit d'itérer sur les lignes du dgv, tester la couleur de fond et changer la visibilité de la ligne :

    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
    private void CBO_Tri_CheckedChanged(object sender, EventArgs e)
            {
                this.ChangeGreenRowsVisibility();
            }
     
            private void ChangeGreenRowsVisibility()
            {
                for (int i = 0; i < DGV_Matable.RowCount; i++)
                {
                    if (DGV_Matable.Rows[i].DefaultCellStyle.BackColor == Color.LimeGreen)
                    {
                        DGV_Matable.Rows[i].Visible = !DGV_Matable.Rows[i].Visible;
                    }
                }
            }

  3. #3
    Membre averti Avatar de BRUNO71
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 502
    Points : 319
    Points
    319
    Par défaut
    Bonjour lead8209,

    Merci pour ta réponse rapide....
    Je viens de tester, je précise que j'ai un DGV vierge au démarrage..de mon appli.
    Quatre département en attente (disons dep1, dep2 dep3 et dep4).
    Ensuite j'ai la possiblilité d'afficher au moyen d'une liste déroulante l'un ou l'autre....
    A la base sur le CellFormatting j'avais testé ce code..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if (DGV_Matable["Date_D1", e.RowIndex].Value.ToString() == "")
                {
                    DGV_Tble_MES.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
                }
                else
                {
     
                    DGV_Matable.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.LightGreen;
                    DGV_Matable_MES.Rows[e.RowIndex].Visible=false;
                }
    Cela me cache les lignes de trois dep sur quatre et j'obtiens ce message d'erreur pour le dep1 :
    System.InvalidOperationException*: 'Impossible de rendre invisible la ligne associée à la position du gestionnaire de devise.'

    Je viens de tester ton code comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
         for (int i = 0; i < DGV_Matable.RowCount; i++)
                {
                    if (DGV_Matable.Rows[i].DefaultCellStyle.BackColor == Color.LightGreen)
     
                        DGV_Matable.Rows[i].Visible=false;
     
                }
    J'ai le même message, pour le même dep1...(System.InvalidOperationException*: 'Impossible de rendre invisible la ligne associée à la position du gestionnaire de devise.')

    Je ne comprend pas ce message !
    OHOH ! je modifie mon message....pour le coup le dep1 débute sur une ligne verte....(donc le message me dit impossible car elle est utilisée !!!!

    Mon objectif serait de pouvoir afficher/masquer les lignes verte depuis une case à cocher...
    Si tu as la réponse, je suis preneur.
    Merci

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Bonjour,
    étrange ce message. Jamais croisé en 10 ans de dev sur Winforms.
    Je te pose tout mon qui est fonctionnel. Vois ce que tu peux en faire. Sinon poste ton code si ce n'est pas confidentiel. Il doit y avoir une configuration, un événement ou un moment d'accès au dgv qui n'est pas correct.


    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
     
    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.DGV_Matable.AllowUserToAddRows = false;
                this.Shown += Form1_Shown;
            }
     
            private void Form1_Shown(object sender, EventArgs e)
            {
                for (int i = 0; i < 5; i++)
                {
                    DGV_Matable.Rows.Add("abc", "def", "ghi");
                    ColorRow();
                }
            }
     
            private void ColorRow()
            {
                DGV_Matable.Rows[DGV_Matable.RowCount - 1].DefaultCellStyle.BackColor = DGV_Matable.RowCount % 2 == 0 ? Color.White : Color.LimeGreen;
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                this.ChangeGreenRowsVisibility();
            }
     
            private void CBO_Tri_CheckedChanged(object sender, EventArgs e)
            {
                this.ChangeGreenRowsVisibility();
            }
     
            private void ChangeGreenRowsVisibility()
            {
                for (int i = 0; i < DGV_Matable.RowCount; i++)
                {
                    if (DGV_Matable.Rows[i].DefaultCellStyle.BackColor == Color.LimeGreen)
                    {
                        DGV_Matable.Rows[i].Visible = !DGV_Matable.Rows[i].Visible;
                    }
                }
            }

  5. #5
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 900
    Points : 1 918
    Points
    1 918
    Par défaut
    Je pense que le message de l'exception a du souffrir d'une mauvaise traduction. Ce que ça m'évoque en tout cas c'est que tu aurais une ligne sélectionnée, que tu veux rendre invisible et que cela pose problème à la DataGridView. Tu peux essayer en vidant la sélection avant de lancer ton traitement (éventuellement en vérifiant avant s'il y a au moins une ligne à rendre invisible qui fait partie de la collection).

    Apparemment une autre personne a eu le même problème et une solution lui a été proposée (c'est du VB .Net, mais ça reste du .Net Framework) :
    https://www.developpez.net/forums/d4...gne-invisible/

    En bonus : bien utiliser un DataGridView (notamment par rapport aux performances).

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

Discussions similaires

  1. Couper coller une ligne selon condition
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/05/2019, 08h50
  2. [XL-2010] masquer lignes selon conditions
    Par Daniel117 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 06/08/2015, 09h55
  3. supprimer ligne selon condition
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 17/06/2009, 16h39
  4. Colorer une ligne selon condition
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/10/2008, 08h23
  5. copier des lignes selon condition
    Par malek1913 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/02/2008, 16h45

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