3 Ebenen von Listen in der verschachtelten Ansicht

8

Ich habe diese Tabellen Pages , PageVersions und ElementsOnPageVersions .

Ich möchte dies auf einer Seite auf einmal zeigen, in einer zusammenklappbaren Art von Ansicht.

So:

  • Seite 1

    • Version 1
    • Version 2
    • Version 3
    • Version 4
      • Element 1
      • Element 2
      • Element 3
  • Seite 2

    • Version 1
    • Version 2
    • Version 3
    • Version 4
      • Element 1
      • Element 2
  • Seite 3

    • Version 1
      • Element 1
  • Seite 4

    • Version 1
      • Element 1

Ich bin unsicher, was der beste Weg ist, um die Daten abzurufen und sie im Layout des kollabierten Layouts anzuzeigen.

Ich würde so etwas tun:

  1. Hol alle Gegenstände auf einmal. "Wählen Sie * aus ElementsOnPageVersion und inneren Join PageVersions v auf e.PageVersion = v.id inneren Join Seiten p auf v.PageId = p.id"
  2. Iteriere durch alle und baue die hierarchische Struktur der sortierten Liste so, dass sie wie das kollabierte Layout aussieht. PageLists [PagesObject], PagesObject hat eine sortierte Liste von PageVersionObjects, die eine sortierte Liste von ElementObjects enthält.
  3. Iterate durch die letzte PagesList-Liste Erstellen der Seite. Innerhalb dieser Seite werden die Versionen der Seite durch iteriert und in jeder Version durch die Elementliste.

So würde ich es in diesem Moment tun. Aber es scheint zu schwer und viel zu wiederholen.

Was wäre der beste Weg, dies zu tun?

    
user1728871 12.12.2013, 08:31
quelle

3 Antworten

1

Ich würde darüber nachdenken, Ihre drei verschiedenen Elemente in eine einzige selbstverweisende Liste zu projizieren. Jedes Element benötigt eine ID, eine Beschreibung und eine ParentId. Ich würde ein Betrachtungsmodell für diesen Zweck machen.

%Vor%

Damit können Sie entweder asp: TreeView in Webforms oder eine andere Art von jQuery tree / treeview verwenden, wenn Sie MVC verwenden.

    
Aaron Palmer 16.12.2013 16:12
quelle
0

Ich habe tatsächlich etwas gebaut, das etwas sehr Ähnliches macht. Ich kann Ihnen die HTML-Quelle zu meinen geben, aber ich würde den .NET-Code ändern müssen, um firmenspezifische, proprietäre Informationen zu entfernen, bevor Sie diese öffentlich veröffentlichen (plus in C # konvertieren).

leider für mich, um mir zu ändern, um Ihre Bedürfnisse, es wäre fast bis zu einem Monat, bevor ich in der Lage wäre, um es zu erreichen (aufgrund einer anstrengenden Woche, bevor wir einen 2-wöchigen Urlaub). Aber Sie können sich meinen HTML-Code ansehen und sehen, was Sie daraus wiederverwenden können. Von dem, was ich von Ihrer Anfrage verstehe, würden Sie ungefähr die Hälfte meines JavaScript und seiner Funktionalität scratchen. aber wenn ich in deinen Schuhen wäre, würde ich diesen Code schätzen, um als Starter zu verwenden und zu verschrotten, was ich nicht wollte und vielleicht etwas hinzufüge. Oder du denkst einfach, dass mein Code Müll ist und benutze ihn überhaupt nicht. ; P

Also hier ist mein HTML & amp; JavaScript, damit Sie damit arbeiten können. Es behandelt das Kollabieren und Expandieren von Knoten, die ul und ol Listen verwenden.

%Vor%

Ich habe auch bemerkt, dass mein Projekt ein WebControl für IE verwendet hat, das so weit zurück wie WinXP funktionieren musste. also war ich in was ich verwenden könnte, da es für IE 7 arbeiten musste begrenzt, aber das schöne ist, es funktioniert für den Weg zurück zu WinXP neueste Version von IE. Es ist mir auch wichtig, standardkonformen Code zu verwenden. Meines Wissens funktioniert mein JavaScript auch für alle standardkonformen Browser. Ich habe es in den neuesten Versionen von Chrome und FF und IE 10, IE 8 und IE 7 getestet.

Es gibt immer noch ein gutes Stück Code, das benötigt wird, um die Daten in eine HTML-Seite zu generieren, aber dies kann die Hälfte Ihrer Anfrage lösen.

In meinem .NET-Code musste ich diese JavaScript- und HTML-Listen erstellen, die ich in ein paar Wochen geben kann.

    
Shawn Kovac 16.12.2013 15:49
quelle
0

Sie können Dictionary-Objekte verwenden, um hierarchische Daten zu füllen. Dieses Codebeispiel könnte hilfreich sein:

%Vor%

Ich habe DataTable in diesem Beispielcode verwendet, aber Sie können dasselbe mit SqlDataReader verwenden.

Um HTML zu erstellen, können Sie Folgendes tun:

%Vor%

In diesem Prozess können Sie auch CSS-Klassen, IDs oder einfaches JavaScript anwenden, um ein Reduzierungs- / Erweiterungsverhalten hinzuzufügen.

Bitte beachten Sie, dass ich die Leistung dieses Codes nicht mit anderen Ansätzen verglichen habe, daher bin ich mir da nicht so sicher, aber es dauerte 8ms in einem Test auf einer durchschnittlichen Maschine, 8000 Datensätze zu verarbeiten.

    
mali303 19.12.2013 13:17
quelle

Tags und Links