Masquer beaucoup de lignes dans un datagridview

chaudakh Messages postés 8 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 10 mars 2011 - 27 mai 2007 à 05:01
chaudakh Messages postés 8 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 10 mars 2011 - 27 mai 2007 à 18:46
Bonjour,

J'essaie de filtrer des lignes d'un datagridview (qu'on appellera Daragridview1)...
A noter que ce datagridview n'est pas relié à une source de données... Il a été rempli au préalable "à la main" ...

L'algorithme de filtrage renvoie un tableau appelé Affich qui recense tous les indices des lignes du datagridview1 à masquer. Je tente de masquer les lignes correspondantes par le code naïf :


For

Each index
As
Integer
In Affich
DataGridView1.Rows(index).Visible=
False
Next



Le souci est que le Datagridview1 contient 14000 lignes environ et qu'il y a bcp de lignes à masquer, bien souvent (au moins 6000). La boucle ci-dessus est vraiment trop peu performante et très très très lente. (environ 1min 30 pour arriver au bout de la boucle et m'afficher le Datagridview1 filtré). Comment remplacer cette boucle ci-dessus par quelque chose de beaucoup plus performant en temps ?

Merci de votre aide.

2 réponses

chaudakh Messages postés 8 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 10 mars 2011
27 mai 2007 à 05:03
Bon visiblement le code est mal affiché il faut lire :

For Each index As Integer In Affich
DataGridView1.Rows(index).Visible = False
Next
0
chaudakh Messages postés 8 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 10 mars 2011
27 mai 2007 à 18:46
J'ai remarqué que si au lieu de cacher les lignes, je les mettais en rouge, l'algorithme est infiniment plus rapide :

For Each index As Integer In Affich
DataGridList.Rows(index).DefaultCellStyle.BackColor = Color.FromArgb(255, 221, 221)
Next

Pourquoi est-ce donc si lent de mettre la propriété Visible à True ou False ? Comment rendre cette boucle sur la propriété Visible très rapide ?
0