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 :

DataGridView : problème de scintillement


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 50
    Par défaut DataGridView : problème de scintillement
    Bonjour,

    Je suis face à un comportement assez ennuyant avec les DataGridView, un problème de rafraichissement de l'affichage lors du chargement du tableau et/ou lors du changement des couleurs des cellules.

    J'ai tout d'abord eu un problème de rafraichissement par balayage très lent. J'ai défini l'événement CellFormating de manière à ce que certaines cellules soient grisées car non éditables, et d'autres blanches car éditables. Parfois, des lignes entières peuvent être grisées suivant les contraintes de l'application.
    Je remarquais à chaque ouverture du tableau qu'on voyait d'abord que les cellules étaient toutes blanches, puis un balayage se faisait de manière à colorier une par une et de haut en bas les lignes du tableaux. Comme si je me retrouvais face à un très vieux PC qui saccade.
    J'ai pu résoudre ce premier problème en affectant la propriété DoubleBuffered à True, astuce que j'ai trouvée ici : http://stackoverflow.com/questions/1...my-two-screens

    Maintenant, je suis face à un autre problème de rafraichissement de l'affichage, et je pense qu'il est étroitement lié au précédent. Ce n'est plus un problème de balayage, mais de scintillement maintenant. En effet, le tableau apparait une fraction de seconde en blanc, puis gris après le "coloriage".
    Ce que j'aimerais arriver à faire, c'est que le tableau s'affiche directement dans les coloris souhaités et ne les fasse pas à la vue de l'utilisateur.
    J'ai essayé les méthodes SuspendLayout() et ResumeLayout() lors du rafraichissement des données, mais cela ne change absolument rien à l'affichage. J'ai également essayé bêtement un Hide() puis un Show(), mais rien à faire, le "coloriage" se fait quand même après.

    Quelqu'un aurait-il une idée sur la meilleure manière de régler ces problèmes de rafraichissement ?

    Merci d'avance.

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2010
    Messages : 132
    Par défaut
    Je ne sais pas pour le double buffered, suspend, resume et tout, mais presque tous les problèmes de rafraichissement que j'ai eu sur des datagridview (dgv) ou sur d'autre control d'ailleurs, c'est lorsque j'avais une couleur Nothing, qui n'est pas transparent, mais la couleur 0 je crois.

    Vérifie que tes cellules "blanches" ne sont pas en fait de couleur 0, et si tu as overridé des paint event, vérifie que toutes les couleurs utilisées sont initialisées, y compris celle des cellborders.

    Combien de colonnes as tu dans ta dgv? des colonnes personnalisées? combien de lignes de la dgv sont visibles en même temps dans (les dgv ne sont pas des exemples de rapidité de rafraichissement de facon générale)? est ce que tu change les couleurs des cellules? row/column template?...

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 50
    Par défaut
    Salut et merci pour ta réponse.

    J'ai 10 à 15 colonnes visibles, une 30aine de lignes visibles, je change effectivement les couleurs de mes cellules via l'événement CellFormating.

    Toutes mes cellules ont toujours une couleur correctement définie. Par contre j'ai remarqué que mon tableau était principalement blanc au démarrage, puis devenait grisé, alors que dans le contexte de mon application, j'ai tout intérêt à mettre comme couleur initiale le gris vu que ce sera la couleur qui reviendra le plus souvent.
    C'est ce que j'ai fait et résultat, l'effet de scintillement est quasi inexistant ainsi.

    Donc mon problème est pour ainsi dire résolu, mais ça n'empêche que je retomberai surement dessus si je dois gérer un tableau avec plusieurs couleurs dans les cellules. Je ne vois pas trop à quoi servent les fonctions SuspendLayout et ResumeLayout si visuellement cela ne change strictement rien...

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

Discussions similaires

  1. [C#]Héritage d'un DataGridView, problème avec le designer
    Par Pilloutou dans le forum Windows Forms
    Réponses: 18
    Dernier message: 29/02/2012, 08h21
  2. Réponses: 1
    Dernier message: 24/01/2007, 16h00
  3. Problème de scintillement
    Par grandjouff dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/09/2006, 02h49
  4. problème de scintillement
    Par chabfive dans le forum Graphisme
    Réponses: 4
    Dernier message: 21/06/2006, 11h38
  5. Problème de scintillement sur le curseur d'une TTrackbar
    Par xtapola dans le forum Composants VCL
    Réponses: 2
    Dernier message: 18/11/2005, 13h51

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