2009-05-07 4 views
1

Ich bin in einer Situation, in der ich einen Baum anzeigen muss. Einige der Knoten verfügen jedoch über 35000 untergeordnete Knoten (direkte untergeordnete Knoten). Dies ist natürlich viel zu langsam in Bezug auf die Benutzerfreundlichkeit.Baumansicht mit Laden auf Anfrage große Anzahl von Knoten auf einer Ebene

Ich würde lieber sehen, dass der Baum nur die Knoten lädt, die im Browser-Ansichtsfenster sichtbar sind.

Solche Bäume existieren für WinForms und C++, weiß jemand von Ihnen, ob solch eine Struktur für ASP.NET existiert?

Wir verwenden derzeit die Telerik Treeview, die eine schöne Steuerung ist, aber die beschriebene Situation nicht unterstützt.

zusätzliche Fragen

Aus Usability-Sicht: Wie man mit solchen Bäumen beschäftigen haben. Es ist nett, 35000 Knoten auf einer Ebene anzuzeigen, aber wie findet man etwas in diesem Baum? Verwenden Sie Paging in einem Baum? oder ein Suchfeld? oder vielleicht zusätzliche Ebenen hinzufügen?

Antwort

2

Mit so vielen Knoten, auch wenn Sie eine performante Möglichkeit finden, sie anzuzeigen, wird es wahrscheinlich nicht sehr benutzerfreundlich sein. Stellen Sie sich vor, Sie versuchen, durch 35.000 Knoten zu blättern, nur um den Knoten zu finden, an dem Sie interessiert sind! Gleiches gilt für Paging. Geht ein Benutzer wirklich auf Seite 3500 Seiten (unter Annahme einer Seitengröße von 10), um sein Ziel zu finden? Wahrscheinlich nicht, und wenn sie es tun, werden sie wahrscheinlich nicht allzu glücklich sein. :)

Stattdessen, mit großen Datensätzen wie diesem, finde ich es am besten, eine Art von "Filter" UI bereitzustellen. Etwas, das es Ihrem Benutzer ermöglicht, die verfügbaren Daten in einer überschaubareren Sammlung zu gestalten.

Ich bin nicht sicher, welche Fähigkeit Sie haben, Filterung zur Verfügung zu stellen (d. H. Welche Felder Sie filtern könnten), aber ich denke, das ist Ihre beste Wette. Optionen für die Benutzeroberfläche sind.

  1. So etwas wie RadGrid für ASP.NET AJAX, die einen integrierten Filter UI zur Verfügung stellen kann, das Benutzern ermöglicht, schnell die Werte finden sie interessiert sind
  2. des Kunden RadTreeView Verwendung -Side-API und Unterstützung für das Laden von Knoten bei Bedarf, können Sie ein Textfeld erstellen, das die Knoten in der Struktur filtern würde, wenn der Benutzer eingibt. Sie würden einfach das onkeyup-Ereignis der TextBox verarbeiten und dann eine Anforderung an einen Webdienst auslösen, um die Knoten zu erfassen, die die Filterkriterien erfüllen, und die Node-Auflistung Ihres TreeView durch das Ergebnis ersetzen.Das wird es viel einfacher machen für Ihre Benutzer ihren Zielknoten zu finden.

Offensichtlich gibt es auch andere Ansätze, aber hoffentlich gibt Ihnen das einige Ideen.

Kurze Antwort: Für große Datasets würde ich eine Kombination aus Echtzeit-Filterung und Webdiensten verwenden, um meinen Benutzern eine überschaubare Ergebnismenge zu präsentieren. Für die anfängliche Belastung würde ich nur die ersten (sagen wir mal) 200 Knoten laden, um die Leistung hoch zu halten.

Hoffe, das hilft! -Todd

1

Ich weiß, dass es einige jQuery powered Tree Controls gibt. Ich kenne die Namen nicht aus der Hand. Das ASP.NET-Struktursteuerelement unterstützt dies definitiv nicht, da es nicht AJAXifierable ist. Für das Anzeigen von 35000 Knoten würde ich sie so pagen.

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

Wenn Sie den Mauszeiger über mehr bewegen oder darauf klicken, werden mehr Knoten angezeigt. Wenn Sie 100 Unterknoten anzeigen, würde ich 200 laden und die anderen 100 ausblenden. Wenn Sie den Mauszeiger über mehrere Unterknoten bewegen, erscheint sie sofort. Und jedes Mal, wenn Sie den Mauszeiger über mehr bewegen, werden die nächsten versteckten 100 geladen.

Außerdem ist es nicht so schwierig, eine benutzerdefinierten Baumstrukturen heutzutage mit allen höheren Browsern zu erstellen, verwenden Sie <ul> und <li> verschachtelten Knoten und Unterknoten zu erstellen und dann den entsprechenden Styling anwenden. Die <li> können Links in ihnen haben, wenn Sie das ganze Klicken einfacher machen möchten.

Meine zwei Cent.