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 :

DatagridviewCell.style ne parait pas modifié [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 249
    Par défaut DatagridviewCell.style ne parait pas modifié
    Salut,

    Soit une Form contenant un DataGridView bindé par un BindingSource.

    Une méthode change le style des cellules s'il y a une erreur ou un avertissement lié aux données de la cellule.
    La méthode est appelée à plusieurs endroits et fonctionne très bien sauf quand elle est appelée dans le Load.
    Après un passage pas à pas du load, je constate que la méthode passe bien et que le style des cellules est bel et bien modifié par la méthode.
    Pourtant quand la Form s'affiche (après le Load) les cellules qui ont été modifiées par la méthode (cfr debug en pas-à-pas) restent imperturbablement blanches alord qu'elles devraient être rouges ou jaune selon le cas.

    Quelqu'un comprend-il pourquoi ?

    Merci de vos z'avis z'avisés

    La méthode :
    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
            private void ligneDataGridView_ChangeCellStyleOnValidation()
            {
                foreach (DataGridViewRow row in ligneDataGridView.Rows)
                    foreach (DataGridViewCell cell in row.Cells)
                        cell.Style = null;
     
                foreach (DataSetParcelles.ErreurLigne ErreurLigne in ErreursParcelle)
                    if (ErreurLigne.Position > 0 && !string.IsNullOrEmpty(ErreurLigne.ColumnName))
                    {
                        if (ErreurLigne.ColumnName == "Centre" || ErreurLigne.ColumnName == "Rayon")
                        {
                            ligneDataGridView["CentreRayon", ErreurLigne.Position - 1].Style = CellStyleError;
                            ligneDataGridView["CentreRayon", ErreurLigne.Position - 1].ToolTipText = ErreurLigne.Message.Substring(ErreurLigne.Message.IndexOf(" : ") + 3);
                        }
                        else
                        {
                            ligneDataGridView[ErreurLigne.ColumnName, ErreurLigne.Position - 1].Style = CellStyleError;
                            ligneDataGridView[ErreurLigne.ColumnName, ErreurLigne.Position - 1].ToolTipText = ErreurLigne.Message.Substring(ErreurLigne.Message.IndexOf(" : ") + 3);
                        }
                    }
                foreach (DataSetParcelles.ErreurLigne AvertissementLigne in AvertissementsParcelle)
                {
                    if (AvertissementLigne.Position > 0 && !string.IsNullOrEmpty(AvertissementLigne.ColumnName))
                    {
                        if (AvertissementLigne.ColumnName == "Centre" || AvertissementLigne.ColumnName == "Rayon")
                        {
                            ligneDataGridView["CentreRayon", AvertissementLigne.Position - 1].Style = CellStyleAvertissement;
                            ligneDataGridView["CentreRayon", AvertissementLigne.Position - 1].ToolTipText = AvertissementLigne.Message.Substring(AvertissementLigne.Message.IndexOf(" : ") + 3);
                        }
                        else
                        {
                            ligneDataGridView[AvertissementLigne.ColumnName, AvertissementLigne.Position - 1].Style = CellStyleAvertissement;
                            ligneDataGridView[AvertissementLigne.ColumnName, AvertissementLigne.Position - 1].ToolTipText = AvertissementLigne.Message.Substring(AvertissementLigne.Message.IndexOf(" : ") + 3);
                        }
                    }
                }
            }

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2012
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2012
    Messages : 87
    Par défaut
    Bonjour,

    Je n'en suis pas 100% sur mais il est possible que le Databinding ne soit pas réalisé lors du .load et que , par conséquent le style de ton datagrid soit reset.

    Essaye plutôt d'appeler ta méthode pendant l'event DataBindingComplete de ton DataGridView.

    MvK

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 249
    Par défaut
    Merci de ta réponse

    Au moment du passage dans la méthode, le DataGridView a bien les lignes avec les valeurs. Il a donc déjà été bindé.

    J'ai aussi essayé en mettant la méthode dans le DatabindingComplete, mais il passe dessus 2 fois. Je ne comprend pas pourquoi et ça ralenti un peu quand j'ai un millier de lignes dans le DataGridView.
    Si je n'ai pas d'autre solution je garderai celle-là, mais je trouvais qu'un seul passage serait mieux.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2012
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2012
    Messages : 87
    Par défaut
    J'ai aussi essayé en mettant la méthode dans le DatabindingComplete, mais il passe dessus 2 fois.
    Ce qui veut dire que, possiblement, un second databinding était fait après le passage dans le .load et par conséquent rendait caduque la mise en forme dans le .load, à tester en regardant dans l'ordre de passage des 2 events DatabindingComplete par rapport au .load.

    Selon msdn :
    Cet événement est déclenché lorsque le contenu de la source de données est modifié ou lorsque la valeur de la propriété DataSource, DataMember ou BindingContext est modifiée.

    Par exemple, la gestion de cet événement est utile pour redimensionner par programme des lignes et des colonnes en fonction des mises à jour du contenu.
    Donc a voir pourquoi le DatabindingComplete est déclenché deux fois.

    MvK

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 249
    Par défaut
    Merci,

    Je vais fouiller un peu pour trouver pourquoi il passe 2 fois, parce que les vérifs d'erreurs et d'avertissements ne changent rien aux données ni au DataGridView.
    Elles font juste de la lecture de data, réagissent selon ce qu'il faut et alimentent des list contenant les erreurs et avertissements.
    Et si je ne trouve vraiment pas, ben je passerai 2 fois dessus.

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

Discussions similaires

  1. [ADO.Net][VB.NET 2.0] Pourquoi ma bdd n'est pas modifiée ?
    Par olivier57b dans le forum Accès aux données
    Réponses: 5
    Dernier message: 30/04/2006, 21h51
  2. Réponses: 2
    Dernier message: 04/01/2006, 09h13
  3. [D7] comment ne pas modifier des lignes d'1 TStringGrid
    Par raoulmania dans le forum Composants VCL
    Réponses: 5
    Dernier message: 15/12/2005, 07h28
  4. Réponses: 4
    Dernier message: 21/08/2005, 19h14

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