Bonjour, je viens de tomber sur un dysfonctionnement lors de l'utilisation d'un controle MSHFLEXGRID lié à un controle ADO;
ce dysfonctionnement est assez difficile à expliquer et j'ai mis de très nombreuses heures pour comprendre ce qu'il se passe
J'utilise ma FLEXGRID avec une ligne de "titre" et j'ai donc paramétré la propriété FIXEDCOL à 1
Dans ces conditions, lorsque j'affiche des données via un select et un refresh
et que je clique sur la première ligne de données, la propriété ROWSEL est à 1, pour la ligne suivante ROWSEL est à 2 ce qui est normal;
Le dysfonctionnement intervient dans le cas où le SELECT qui sert à remplir la GRID ne renvoie aucune ligne (ce qui peut arriver si la clause WHERE du SELECT est fort restrictive); le REFRESH se passe correctement et la GRID n'affiche que la ligne de titre
SI, après cet affichage vide, on effectue à nouveau un SELECT/REFRESH qui retourne des lignes, alors, (et c'est la le dysfonctionnement), la propriété ROWSEL de première ligne de données n'est plus à 1 mais à 0....; la seconde ligne est à 1
Vous trouverez ci dessous le code permettant de tester cette anomalie; le projet VB et sa base de test sont également en pièce jointe.
Sans modifier le code VB, en cliquant sur la première ligne de données, ROWSEL sera à 0
Si ensuite, vous mettez en commentaire le premier ordre refresh, et que vous cliquez sur la première ligne le ROWSEL sera à 1
Tout ceci entraine pas mal de soucis dans mes développements puisque le numéro de ligne n'est pas toujours le même.....
Je vous remercie par avance de l'aide que vous pourrez m'apporter
PHILIPPE
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 Private Sub Form_Load() Dim varparbal As String Dim varbasloc As Database Dim vartrasql As Recordset ' ouverture base varparbal = "C:\base.accdb" Set varbasloc = OpenDatabase(varparbal) ' select ne retournant aucune ligne Form1.formado.RecordSource = "SELECT col1, col2 FROM table1 where col1=""VALEUR IMPOSSIBLE""" Form1.formado.Refresh ' select retournant toutes les lignes Form1.formado.RecordSource = "SELECT * FROM table1" Form1.formado.Refresh Form1.formgrid.FormatString = "colonne1|colonne2" End Sub Private Sub formgrid_Click() MsgBox Form1.formgrid.RowSel End Sub
Partager