2010-02-16 4 views
1

J'utilise datagridview dans l'application Windows développée dans C# VS2005 .net 2.0.DataGridview repeint très lentement

Datagridview contient une liste d'objets métier. Cela prend un retard ennuyeux de 2-3 secondes avant de commencer à afficher les lignes dans datagridview à la manière d'un rideau tombant. Quand je reviens à mon application à partir de n'importe quelle autre fenêtre, je commence à repeindre le processus de la même façon. C'est assez ennuyeux. Plz quelqu'un m'aider à régler ça!

+0

Pouvez-vous réduire le code au minimum qui répète le problème et post il - ou juste poster ce que vous pensez sont les sections pertinentes. – ChrisF

+0

L'explication la plus probable est que vous revenez à la source de données pour repeupler la grille chaque fois que vous repeignez la grille. – ChrisF

+1

Combien de rangées avez-vous enfouies dans cette grille? –

Répondre

0

J'ai le même problème. Le GridView n'est pas lié à une source de données. Je construis le GridView moi-même. Je reçois le même effet de rideau tombant lorsque je redimensionne (agrandit) ou défile verticalement. C'est plutôt mauvais. L'effet est le même si j'ai 100 ou 100000 lignes. C'est également la même chose si j'ai DoubleBuffered réglé sur true ou false.

J'ai cherché sur le net pour savoir ce qui se passait, et jusqu'à présent rien. C'est dommage que le gars qui a commencé ce sujet n'ait pas suivi, ou nous pourrions avoir une réponse maintenant.

1

Je ne sais pas pourquoi cela fonctionne, mais définir le contrôle DataGridView à double tampon fonctionne un traitement absolu. Assurez-vous que la propriété DoubleBuffered sur le formulaire hôte est également false. Après cela, mon contrôle de grille est passé de redessiner si lentement (quel que soit le volume de données) que vous pouviez presque compter les cellules au fur et à mesure, - à redessiner aussi vite que n'importe quel autre contrôle.

La propriété DoubleBuffered est protégé sur le DataGridView, vous devrez créer une classe dérivée et définir la propriété là-bas, par exemple:

class DoubleBufferDataGrid : DataGridView 
{ 
    public DoubleBufferDataGrid() 
     : base() 
    { 
     this.DoubleBuffered = true; 
    } 
} 
Questions connexes