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

MFC Discussion :

Manipulation scrollbar de CListCtrl


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Par défaut Manipulation scrollbar de CListCtrl
    Bonjour à tous!
    Après m'être arraché la moitié des cheveux sur ce problème, je me sens dans l'obligation de vous demander de sauver l'autre partie de mon crâne bientôt chauve
    Je me connecte à une base de données pour récupérer des lignes, mais là où ça se complique, c'est que je vais devoir attaquer des bases possédant plusieurs centaines de milliers de lignes.
    Je dois afficher ces données dans un CListCtrl, mais je ne récupère que 5000 lignes par 5000 lignes.
    L'idée serait de dire :
    Ma CListCtrl contient, par exemple, 100 000 lignes (SetScrollInfo)
    Donc, quand j'affiche mes 5000 lignes dans le haut de la liste, j'ai une scrollbar verticale qui est affichée comme si la liste contenait bien mes 100 000 lignes.
    Jusqu'ici tout va bien!

    Mais ensuite, je demande à descendre plus bas dans la liste. Et si on descend en dessous des 5000 lignes, l'utilisateur voit du vide.
    L'idée serait de rafraichir, au moment du relâchement de la scrollbar.
    Je réussi à intercepter l'événement parfaitement, mais je n'arrive pas à dire à ma liste:
    Maintenant tu affiches 5000 lignes (que j'ai nouvellement copié en mémoire) à l'endroit que je veux dans la liste, tout en gardant la même taille de scrollbar:

    - Scrollbar calculée et affichée pour 100 000 éléments dans la liste
    - 5000 lignes affichées entre la position (mettons) 60 000 et 65 000 (le reste des lignes de la liste est vide)
    - Position de la Scrollbar cohérente avec la position des 5000 lignes par rapport à l'ensemble.

    J'espère que j'ai été clair.
    Mon problème est compliqué car je dois afficher les données de base de données ENORMES, dans une CListCtrl, sans pour autant saturer le serveur de requètes SELECT. Si vous avez une autre solution : JE SUIS PRENEUR!

    Mais quoi qu'il en soit, s'il vous plait : AIDEZ MOI!
    Merci d'avance

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Utilisation des listctrl 'virtuel' (http://www.codeproject.com/KB/list/virtuallist.aspx)
    En gros, cela pourrait à ça:
    1/ Une première requête pour le nombre d'enregistrement,
    2/ Un SetItemCount(),
    3/ Un cache éventuel pour tes données et éviter les select trop fréquent,
    4/ Et bien sûr, le traitement de LVN_GETDISPINFO

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Par défaut
    Bon ok!
    Franchement c'est vraiment génial car, maintenant, j'arrive a afficher ce que je veux de la base de donnée et peu importe la quantité de donnée.
    Seul ENORME probleme, c'est que j'utilise déjà une librairie qui me permet d'éditer n'importe quel champ de ma liste
    Cette édition fonctionne sur un principe de SetItemText..
    Je pense que je n'ai pas besoin de détailler plus, vous comprenez ce que cela engendre

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Modification des données par SetItemText Pas très bien ficelé tous ça. Il aurait été plus logique de mettre à jour les données puis de rafraichir l'IHM au besoin...
    Bon, si tu peux modifier ta lib, alors c'est le mieux à faire.
    Si tu ne peux pas modifier ta lib, alors une piste peut être de subclasser ton contrôle et traiter le LVM_SETITEMTEXT ou LVM_SETITEM.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Par défaut
    Modification des données par SetItemText
    Il y a un autre moyen?

    Parce que si c'est le cas, je suis prêt à faire les modifs qui s'imposent...
    D'un autre coté, je n'ai pas vraiment le choix

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par fantomchris Voir le message
    Il y a un autre moyen?
    En toute logique, tu devrais mettre à jour ton 'document' et ensuite rafraîchir les données là où il y en a besoin.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Par défaut
    Ce que tu veux dire, c'est que je dois entrer les données dans ma liste chainée, et ensuite renvoyer vers la liste?

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/05/2011, 19h04
  2. Réponses: 14
    Dernier message: 04/11/2008, 10h25
  3. Réponses: 6
    Dernier message: 07/09/2005, 20h31
  4. [Listbox] ScrollBar Horizontal
    Par haleem dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/04/2005, 07h53
  5. [MFC] CListCtrl : manipuler Selectionchanged
    Par mychawel dans le forum MFC
    Réponses: 2
    Dernier message: 13/07/2004, 14h16

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