J'ai une grande table de base de données que j'ai besoin d'afficher sur un formulaire Windows. Les données sont une sorte de "liste de catégories" que j'ai besoin d'afficher à l'utilisateur dans une structure arborescente, il y a des catégories avec plus de sous-catégories. Le contrôle Treeview a un chargement différé mais le problème est qu'il peut y avoir des centaines de milliers de nœuds racines avec 4 valeurs de chaîne de colonne. J'ai essayé d'ajouter 100 000 nœuds à une arborescence et cela a pris 5 minutes à compléter. Y a-t-il d'autres options pour une telle opération? Pouvez-vous me donner des idées? Il n'a pas ont être un TreeView ..Comment afficher une grande quantité de données rapidement
Répondre
J'ai décidé d'implémenter un mode virtuel/serveur pour l'arborescence.
Merci pour les réponses.
C'est beaucoup de nœuds, mais avez-vous essayé d'appeler BeginUpdate() puis EndUpdate() lorsque vous avez ajouté la liste des nœuds à la TreeView? Cela augmenterait probablement votre performance un peu!
http://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.beginupdate.aspx
Pour des applications comme celle-ci, je tends à mettre en œuvre des fonctionnalités telles que « recherche que vous tapez », qui retourne les noms de catégorie car ils sont tapés dans une zone de texte. Par exemple, à chaque frappe, je reviens à la base de données et renvoie les 10 premières valeurs qui commencent par ce qui est dans la zone de texte. S'il y a plus de 10 résultats, j'indique que plus de résultats sont présents, ou je leur dis d'affiner leur recherche. La recherche directe IMO l'emporte toujours sur le tri et/ou la pagination. Je déteste la pagination. C'est presque toujours un aveu que votre fonctionnalité de recherche n'est pas assez bonne!
Peut-être implémenter une sorte de mécanisme de pagination. 100.000 éléments dans un TreeView serait très difficile à lire du point de vue d'un utilisateur. Fournir seulement 1 000 ou même moins de nœuds racine à la fois réduirait certainement les temps de chargement.
Vous pouvez utiliser les capacités de cache. 20000 enregistrements prend généralement 0,2s à charger. Vérifiez votre support de langue afin de l'utiliser.
salutations,
TreeView a un événement BeforeExpand. Vous pouvez l'utiliser pour déterminer à la volée le contenu du nœud à charger. En d'autres termes, vous devez d'abord charger uniquement les nœuds de niveau supérieur dans votre TreeView.
Si l'utilisateur est sur le point de développer un noeud, vous pouvez extraire les données requises et remplir les sous-noeuds de ce noeud. Utilisez la propriété Tag de TreeNode pour stocker un ID dont les données appartiennent à quel noeud.
Assurez-vous d'utiliser BeginUpdate() et EndUpdate() ou utilisez AddRange() au lieu de Add() pour ajouter des nœuds, car c'est beaucoup plus rapide.