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

C# Discussion :

TreeView : recherche efficace


Sujet :

C#

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Points : 341
    Points
    341
    Par défaut TreeView : recherche efficace
    Bonjour à toutes et à tous,

    Je vous expose mon problème. J'ai un TreeView dont le contenu (TreeNode) est chargé depuis une base de donnée. De plus, afin d'améliorer les performances, le contenu est chargé "à la demande", c'est à dire que c'est au moment on l'on clique sur un noeud, qu'on interroge la base de donnée pour en charger le contenu.

    A présent, j'aimerai pouvoir utiliser une fonction de recherche sur ce TreeView, en filtrant parmis les TreeNode existants (ceux qui sont actuellement chargés) ceux qui correspondent une chaîne de caractère donnée.

    La solution que je pensai la plus simple consistait à parcourir (récursivement) tous l'arbres, et à masquer les noeuds qui ne correspondent pas au motif. Malheureusement, les TreeNode n'ont pas de propriétés "Visible" qui permettrait de les masquer/afficher dynamiquement.

    Il faut donc les supprimer de l'arbre. Je trouve cette solution que peut efficace, et je suis à la recherche d'une autre manière de faire cela.

    J'ai notamment pensé :

    - à étendre les composants TreeView / TreeNode pour inclure une propriété "Visible". Je n'ai aucune idée de la quantité de travail que cela nécessite

    - de recharger l'ensemble du TreeView depuis la base de donnée, en donnant la contrainte de recherche dans les requêtes de la base



    Bref, je suis un peu perdu, et j'aimerai vraiment une solution propre et efficace. Merci d'avance pour votre aide,

    Jérémy

  2. #2
    Membre habitué Avatar de stephane.net
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 170
    Points : 158
    Points
    158
    Par défaut
    que signifie exactement pour toi "Masquer" un Node dans un TreeView ?

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Points : 341
    Points
    341
    Par défaut
    Pour moi, cela signifie ne pas l'afficher

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    une solution peut-etre plus elegante consisterait à décorellé la representation des données

    Plutot que de mettre les données extraites de la base de données directement dans ton treeView, il serait plus judicieux de le mettre dans une structure
    de type arbre mais sans "representation visuel" et d'ajouter la propriété
    Visible pour chaque Item de ton arbre....

    Ainsi, afficher ton TreeView consisterait à le Vider et le reconstruire... à chaque fois...

    En gros, on pourrait voir ma solution comme une solution ou tu as un cache
    de données entre Base de données -> Cache de Données -> TreeView de representation

    Voila... ca pourrait t'aller ?

    The Monz, Toulouse

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Points : 341
    Points
    341
    Par défaut
    En fait, actuellement c'est déjà tel que tu l'expliques. On a une structure d'arbre formée par des objets liés entre eux, et chaque object à une référence vers un TreeNode, de façon a construire aussi l'arbre des TreeNode.

    Ce qui m'ennuie c'est justement de le vider et de le reconstruire à chaque fois...

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    beh en dehors de cette solution de reconstruction, destruction à chaque fois,
    j'vois pas trop de solution... ou alors, tu crées un "clone" de ton treeview
    (qui contient TOUS les noeuds avec mise à jour quand besoin) et à chaque
    fois que tu dois tout détruire, au lieu de "tout détruire" tu repars de ce treeview et tu n'en fais qu'enlever les elements indésirables

    The Monz, Toulouse

  7. #7
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Je confirme : on détruit et on reconstruit, c'est le plus efficace.

    Maintenant, si ton appli a besoin d'encore plus de réactivité et ne peut pas se permettre de perdre quelques millisecondes à détruire et reconstruire un TreeView, il serait peut-être judicieux de ne pas la faire en C#, mais plutôt en C++. Le C# c'est vraiment pas fait pour du temps réel.

    Si le pb c'est le scintillement, je te sugggère de te renseigner sur SuspendLayout et ResetLayout.

Discussions similaires

  1. TREEVIEW, rechercher et sélectionner
    Par p1k1 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/11/2008, 21h01
  2. Treeview : recherche et expand
    Par vince_lille dans le forum ASP.NET
    Réponses: 3
    Dernier message: 17/10/2008, 15h56
  3. Recherche efficace dans une base de donnée excel
    Par endersox dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/06/2008, 06h36
  4. [VB.NET] Faire une recherche dans une treeview
    Par Aspic dans le forum VB.NET
    Réponses: 3
    Dernier message: 15/11/2005, 19h10
  5. recherche composant Treeview...
    Par Blue LC dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 12/11/2005, 18h18

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