Question

Je suis dans une situation où j'ai besoin d'afficher un arbre. Cependant, certains nœuds ont 35 000 nœuds enfants (enfants directs!). Ceci est bien sûr un moyen de ralentir la convivialité.

Je préférerais que l’arborescence ne charge que les nœuds visibles dans la fenêtre du navigateur.

De tels arbres existent pour WinForms et C ++, est-ce que l'un de vous sait s'il en existe un pour ASP.NET?

Nous utilisons actuellement le l'arborescence de Telerik , qui est un beau contrôle, mais ne supporte pas la situation décrite.

questions supplémentaires

Du point de vue de la convivialité: comment gérez-vous de tels arbres? Il est bien d’afficher 35 000 nœuds sur un niveau, mais comment trouver quelque chose dans cet arbre? Utilisez-vous la pagination dans un arbre? ou un champ de recherche? ou peut-être ajouter des niveaux supplémentaires?

Était-ce utile?

La solution

Avec autant de nœuds, même si vous pouvez trouver un moyen performant de les afficher, vos utilisateurs ne l'utiliseront probablement pas. Imaginez que vous essayez de faire défiler 35 000 nœuds uniquement pour trouver le nœud qui vous intéresse! Même chose pour la pagination. Est-ce qu'un utilisateur va vraiment à la page 3500 pages (en supposant une taille de page de 10) pour trouver sa cible? Probablement pas, et s'ils le font, ils ne seront probablement pas trop heureux. :)

À la place, avec de grands ensembles de données comme celui-ci, il est généralement préférable de fournir un type de & "Filtre &"; UI. Quelque chose qui permette à votre utilisateur de & "Modeler &"; les données disponibles dans une collection plus gérable.

Je ne suis pas sûr de votre capacité à fournir un filtrage (c'est-à-dire des champs sur lesquels vous pouvez filtrer), mais je pense que c'est votre meilleur choix. Les options pour l'interface utilisateur sont les suivantes:

  1. Quelque chose comme RadGrid pour ASP.NET AJAX peut fournir une interface utilisateur de filtrage intégrée permettant aux utilisateurs de trouver rapidement les valeurs qui les intéressent.
  2. À l'aide de l'API côté client de RadTreeView et de la prise en charge du chargement de nœuds à la demande, vous pouvez créer une zone de texte permettant de filtrer les nœuds de l'arborescence en tant que types d'utilisateurs. Vous devez simplement gérer l'événement onkeyup de la zone de texte, puis envoyer une demande à un service Web pour récupérer les noeuds répondant aux critères de filtre, et remplacer la collection de noeuds de votre TreeView par le résultat. Cela facilitera beaucoup les utilisateurs à trouver leur nœud cible.

Clairement, il existe également d'autres approches, mais j'espère que cela vous donne quelques idées.

Réponse courte: pour les grands ensembles de données, j'utilisais une combinaison de filtrage en temps réel et de services Web pour présenter un ensemble de résultats plus gérable à mes utilisateurs. Pour le chargement initial, je ne chargerais que les 200 premiers nœuds (par exemple) pour maintenir des performances élevées.

J'espère que ça aide! -Todd

Autres conseils

Je sais qu’il existe des contrôles arborescents utilisant jQuery. Je ne connais pas les noms. Le contrôle d’arborescence ASP.NET ne prend définitivement pas cela en charge, car il n’est pas AJAXifiable. Pour le problème d'affichage des 35 000 noeuds, je les lirais comme ceci.

node
|
-- Sub Node 1
|
-- ...
|
-- Sub Node n
|
-- more...

Lorsque vous survolez plus ou cliquez dessus, vous obtiendrez plus de nœuds. Si vous affichez 100 sous-nœuds, je vais en charger 200 et masquer les 100 autres. De cette manière, lorsque vous passez le curseur de la souris sur plus, cela semble instantané. Et chaque fois que vous survolez plus ... les 100 prochains objets cachés sont chargés.

De plus, il n’est pas si difficile de créer une arborescence de contrôles personnalisée avec tous les navigateurs de niveau supérieur, utilisez <ul> et <li> imbriqué pour créer des nœuds et des sous-nœuds, puis appliquez le style approprié. Le <=> peut contenir des liens si vous souhaitez rendre le clic plus facile.

Mes deux sous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top