Bonjour a tous,
Apres quelques temps a utiliser les datagrid comme élément de presentation je pensais avoir vu tout les trucs tordus possible ;-) Mais non lol je suis depuis une journée sur un truc qui pourtant semble tout con ....
Je m'explique : j'utilise un datagridView contenant 4 colonnes, rempli par des datas trouvées dans un dossier quelconque (donc nombre de row inconnu). La premiere colonne est une DataGridViewButtonColumn. Les boutons ont tous un label égal au nom d'un dossier trouvé dans le dossier de base. Le click sur le bouton provoque l'ouverture d'une fenetre contenant les informations liées a la ligne selectionnée.
Je gere le click sur le bouton avec l'event
Puis je fais un test pour verifier que je suis bien dans la premiere colonne (les colonnes ne sont pas deplacables dc pas de pb a ce niveau la).
Code : Sélectionner tout - Visualiser dans une fenêtre à part CellContentClick
Mon probleme vient du fait que je n'empeche pas le tri des données par colonne (en effet si l'utilisateur a 200 dossiers dans la liste il est bien content d'avoir un tri). Etant donné que les datas viennent d'une List<> qui elle meme contient les instances d'une classe assez complexe, j'utilise l'event
pour detecter le tri et en fonction de la colonne lancer un List.sort(comparer) histoire de trier ma liste de facon personalisée ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part Sorted
J'arrive donc enfin au coeur du pb : lorsqu'on clic sur le header d'une colonne et qu'on trie les datas, au niveau du tri de la datagrid et de la List pas de pb, MAIS l'event CellContentClik (avec CellClick ca fait pareil) semble se déclencher de maniere totalement aléatoire (ce qui provoque bien sur l'ouverture intempestive de ma nouvelle fenetre) ...
- J'ai essayé de feinter en faisant un Clear de la selection de cellule a chaque action qui touche au datagrid mais ca ne change rien.
- J'ai essayé en gerant un flag qui serait mis a true quand l'event Sorted est capté afin de ne pas passer dans tout le traitement de l'event CellClick (car j'ai remarqué qu'il intervient avant le CellClick, hasard ou certitude ?) puis remis a false a la fin de la method gérant l'event CellClick mais le fait que l'event CellClick intervienne aleatoirement derriere empeche toute gestion propre vu que je ne sais jamais si je vais passer dedans pour remettre mon flag a zero (ce qui fait qu'apres il faut cliquer deux fois sur le bouton)
-J'ai pensé (et je ferais en dernier recours) a faire un timer qui refoutrait ce flag a false genre toutes les 100 ou 200 ms mais je trouve ca extremement moche comme méthode ...
Y a-t-il un moyen d'empecher l'event de se produire (sachant qu'il devrait pas vu que personne clique ailleurs que sur le header ...) ou d'etre sur qu'il arrive de maniere predictible ? (Forcer l'evenement ne marche pas non plus vu que le clic sera traité deux fois aléatoirement ....)
Merci d'avance :-)
Partager