Comment manipuler RowIsVisible dans un MSHFlexGrid
Salut
J’ai un MSHFlexGrid de 9 colonnes et de x lignes, en temps ordinaire x et de l’ordre de 200/300 lignes au maximum.
Mais, en cette fin d’année les utilisateurs veulent pouvoir afficher différentes vues à des fins statistiques suivant des critères qu’ils ont la possibilité de définir dans l’interface.
Cela amène l’affichage de plusieurs centaines de lignes (aux plus 995, mais chaque années cela va augmenter plus ou moins d’un millier).
Mon problème, qui sera de plus en plus criant dans les mois et années à venir, dans ce MSHFlexGrid ils ont la possibilité de rechercher une occurrence (mini moteur de recherche).
Pour la recherche c’est Ok, c'est suffisamment rapide.
La première ligne trouvée pour la première occurrence n’étant pas toujours visible, jusqu’à maintenant j’utilise ce code pour la faire apparaitre.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Option Explicit
Private Type Idx
Indx As Integer
Xcol As Integer
Xlgn As Integer
End Type
Dim IdxRech() As Idx
'..............
Private Sub VisualiseRecherche()
MSHFlexGrid1.Row = IdxRech(IdxRec).Xlgn: MSHFlexGrid1.Col = IdxRech(IdxRec).Xcol
'IsVisibleRow, Renvoie ou définit une valeur qui détermine si une ligne spécifique est visible.
If MSHFlexGrid1.RowIsVisible(IdxRech(IdxRec).Xlgn) = False Then
For T = MSHFlexGrid1.rows - 1 To 1 Step -1
MSHFlexGrid1.TopRow = T
If MSHFlexGrid1.RowIsVisible(IdxRech(IdxRec).Xlgn) = True Then Exit For
Next T
End If
End Sub |
En regardant l’aide MSDN de RowIsVisible il est indiqué :
Citation:
Renvoie ou définit une valeur qui détermine si une ligne spécifique est visible.
object.RowIsVisible(index) [=Boolean]
index Valeur de type Long qui indique la colonne. (Colonne ?)
Donc plutôt qu’une boucle, je tente ces 3 lignes à tour de role, en pensant que cela sera plus rapide de faire apparaitre la ligne voulue.
Code:
1 2 3 4 5
| If MSHFlexGrid1.RowIsVisible(IdxRech(IdxRec).Xlgn) = False Then
'MSHFlexGrid1.RowIsVisible(IdxRech(IdxRec).Xlgn) = True
'MSHFlexGrid1.RowIsVisible(IdxRech(IdxRec).Xcol) = True
'MSHFlexGrid1.RowIsVisible(2) = True
End If |
Problème, j’ai comme message d’erreur
Citation:
Erreur de compilation : Affectation à une constante non autorisée
Pourtant il est bien écrit que l’on peut définir cette propriété.
Merci de vos éclairsissements.