IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Event "parasite" CellClick lors du tri d'une colonne de DataGridView


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 22
    Points : 20
    Points
    20
    Par défaut Event "parasite" CellClick lors du tri d'une colonne de DataGridView
    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).

    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 ...

    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 :-)

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Peut-être intercepter le "Mouse Down" sur le Headercell pour désactiver l'eventCellContentClick.
    Et le réactiver sur l'event Sorted de la grid.

    Moi aussi, je me suis bien frité avec le Datagridview

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    humhum je testerais ca demain (oui je suis le soir moi ;-))
    Question bete du debutant que je suis mais comment "desactive-t-on" un evenement ? Et cela ne va-t-il pas au final poser le meme probleme que la methode du flag ?

    Thx pour l'astuce en tout cas c'est deja un point de depart ^^

  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    2 possibilités :
    • en recopiant l'instruction d'activation générée dans le designer et en remplaçant "+=" par "-=" (pour le réactiver, opération inverse).
    • en positionant un flag et on ne fait rien dans le traitemrent de l'event quandle flag est OFF (on le remet à ON pour réactiver lle traitement)

  5. #5
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Bonjour.

    Désolé si je tape à côté de la plaque mais est-ce que tester le e.RowIndex dans le CellContentClick ne serait pas suffisant ?

    Si e.RowIndex est < à 0 (en l'occurence -1 pour le header), tu ne fais rien et sinon tu déroule ta proc.

    PS : je soupçonne que dans ta proc tu utilises le currentcell plutôt qu'utiliser les e.rowindex et e.columnindex pour identifier la cellule clické... si c'est le cas faut mieux éviter car ça masque les petits bug de ce style.

    Cdt.

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    arg c'etait bien ca pas besoin de se prendre la tete avec les event finalement ;-) (je soupconne en plus que j'aurais eu le meme pb qu'avec ma methode du flag vu le phenomene aleatoire ...)

    J'utilisais pourtant e.ColumnIndex dans la gestion du CellContentClick et j'ai a aucun moment pensé que le e.RowIndex me donnerait qque chose different du currentCell que j'avais effectivement testé pour debugguer ...

    Enfin ca m'aura permis d'apprendre a desactiver/activer les evenements hein ;-)
    Ca reste fou ce genre de "bug" meme si il doit pas y avoir des miliers de gens qui veulent trier leurs boutons ... moi je dis au boulot Microsoft :-)

    Merci beaucoup en tout cas je pense que ca va sauver ma journee :-) (et mes cheveux qui s'en allaient par touffe ... ^^)


    (je teste que c'est bien stable et je mettrais en resolu)

  7. #7
    Membre expérimenté Avatar de Tober
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 824
    Points : 1 381
    Points
    1 381
    Par défaut
    Ca reste fou ce genre de "bug" meme si il doit pas y avoir des miliers de gens qui veulent trier leurs boutons ... moi je dis au boulot Microsoft :-)
    C'est pas un bug, mais une fonctionnalite...
    Mais j'avoue que l'utilisation de ces composants avances necessite souvent des explications

  8. #8
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Bonjour.

    Citation Envoyé par Tober Voir le message
    C'est pas un bug, mais une fonctionnalite...
    + 1000 ! Et bien utile en plus !

    Citation Envoyé par Tober Voir le message
    Mais j'avoue que l'utilisation de ces composants avances necessite souvent des explications
    C'est clair que le DGV est trés riche et donc des fois un peu compliqué .

    Penses au

    EDIT : si c'est pas stable ça ne viendra pas de là !

    Cdt.

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Hum pour moi un ClickEvent qui se declenche de maniere aleatoire alors qu'on lui a rien demande ca releve du bug mais bon c'est effectivement resolu :-)

  10. #10
    Membre expérimenté Avatar de Tober
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 824
    Points : 1 381
    Points
    1 381
    Par défaut
    le click event ne se declenche pas n'importe quand, mais d'une facon qui depasse t'as comprehension ! (c'est pas une provocation )

  11. #11
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    mais d'une facon qui depasse t'as comprehension
    Comme beaucoup d'event du DataGridView

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. NullPointerException lors du tri d'une map
    Par snake264 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 02/08/2012, 00h54
  2. Réponses: 8
    Dernier message: 03/12/2010, 16h08
  3. Mauvais focus lors du tri d'une colonne sur un datagrid
    Par Scorpi0 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/10/2007, 14h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo