Announcement

Collapse
No announcement yet.

Gruppierte Pivottabelle aus DB via MVC darstellen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Gruppierte Pivottabelle aus DB via MVC darstellen

    Hallo zusammen,

    vorweg: ich bin blutiger ASP.NET - Anfänger, daher mag meine Frage hier etwas arg simpel erscheinen.

    Dennoch:

    In einem kleinen Lern-/Demoprogramm möchte ich Daten aus einer Datenbanktabelle auf einer Webseite darstellen. Nur anzeigen, nicht editieren, etc.

    etwas vereinfachte Datenstruktur:
    ID (primärer Schlüssel, wird nirgends angezeigt)
    ID2 (Fremdschlüssel, hierüber soll gruppiert werden)
    Wert (ein Wert, der in dem Tabellenfeld angezeigt werden soll)

    Da sind noch ein paar Sachen mehr, aber die sind hier unerheblich.

    Mein Problem:
    Die angezeigte Tabelle soll die Werte der DB zu einer ID2 _nebeneinander_ anzeigen, also eine einzeilige Pivottabelle, und nicht wie üblich untereinander. Es sind nur eine Handvoll Werte, daher ist die max. Breite kein Problem.

    Pro ID2 soll gruppiert werden.
    Weil aber zwischen den einzelnen Gruppen noch ein wenig Text erscheinen soll, dachte ich hier an eine via JS dynamisch erzeugte weitere einzeilige Pivottabelle.

    Die Anzahl solcher Tabellen ist variabel.

    Leider habe ich bisher nur in bestehenden Seiten mal hier und da kleinere Änderungen gemacht. Mit dieser Aufgabe will ich mal "aus dem Nichts" heraus etwas bauen. Ich habe sie dabei bewusst so gewählt, dass hier nicht mit den üblichen Generatoren für Standardseiten gearbeitet werden kann. Den Part habe ich schon. Mir fehlt nur noch die Seite mit der hübschen Ansicht der Datenbankinhalte.

    Ich möchte nun nicht unbedingt die fertige Lösung :-)
    Aber im Moment stehe ich mit Ideen völlig auf dem Schlauch. Ein paar Prototyp-Zeilen, oder Stichworte, die mir eine weitere Suche erleichtern, würden mir schon helfen.

    Das Basisprojekt habe ich über die Templates im VS2012 generiert. Damit sind auch jQuery, Bootstrap und das Entity Framework schon mit drin, können also auch in den Anregungen genutzt werden. Ich selbst gehe in den Infos zu diesen Libs leider total unter. Ich weis nicht, wonach ich da suchen soll.

    WICHTIG: das ganze ist eine MVC-Applikation.
    Mir ist da u. A. aktuell nicht klar, wie ich den gesamten DB-Tabelleninhalt (also alle Datensätze) vom DatenController in die View transferiere. Da könnte ich ja dann schon mal per foreach irgendwas iterieren...

    Die Nutzung der verschiedenen Libs ist durchaus gewollt. Apps ohne sowas gibt es im wahren Leben vermutlich kaum noch. Ich will ja auch was lernen.

    Ciao,
    N.

  • #2
    Hallo nochmal,

    ein wenig bin ich schon selbst weiter gekommen.

    Die anzuzeigenden Daten bekomme ich über ein ViewModel. So erhalte ich 2 Listen, über die ich in der View dann via foreach() iterieren kann. Dabei enthält die 1. Liste die Gruppierung, also alle "ID2". Innerhalb dieser Schleife wird dann jeweils eine kleine einzeilige Tabelle aufgebaut, deren Inhalt die 2. Liste ist. Wobei diese Liste bei jedem Schleifendurchlauf mit neuer ID2 als Schlüssel neu gefiltert wird.

    Einziges vewrbleibendes Problem:

    wie bekomme ich es hin, die Tabelle nach rechts, statt nach unten wachsen zu lassen...

    Ciao,
    N.

    Comment


    • #3
      Statt einer neuen Reihe eine neue Spalte anhängen....
      Christian

      Comment


      • #4
        ja, schon klar.
        Aber wie mache ich das?
        Kann ich das durch Funktionalitäten von Razor erledigen, oder brauche ich dazu JS?

        Comment


        • #5
          Hallo netx,

          ich habe bei der Arbeit erst kürzlich so etwas gemacht. Ich hatte freie Hand und konnte mir Technik und Vorgehensweise selber aussuchen.
          Ausgangspunkt waren Zahlen, die auf einem SQL-Server liegen. Diese mussten gruppiert und summiert in einer Tabelle angezeigt werden.

          Ergebnis:
          Mittels ASP.NET MVC Razor habe ich die Anwendung erstellt. Für die Pivot-Darstellung habe ich den ReportViewer (s. VS Vorlagen) verwendet. Ich habe es jetzt nicht genau im Kopf, weiß aber noch dass entweder der ReportViewer selber bzw. ein Teil dieses Reports als Partialview in dem MVC-Projekt eingebunden werden muss. Es sind auch ein paar Einstellungen notwendig, die etwas tricky sind. Bei Bedarf kann ich Dir den Entwurf bzw. die wichtigen Infos des Projekts gerne zur Verfügung stellen.

          Für meine Zwecke war im Übrigen genial, dass der ReportViewer von Haus aus eine Exportmöglichkeit nach Excel mitbringt. Der Reportviewer erzeugt eine automatische Gliederungsansicht in Excel, die eine super Übersicht auch bei großen Tabellen ermöglicht.

          Das ganze hört sich wild an, ist am Ende aber gar nicht so umfangreich. Ich habe damals auf jeden Fall keine Möglichkeit gefunden, die Daten auf andere Art und Weise als Pivottabelle darzustellen. Am Anfang war ich, wie Du auch, bei foreach... und durchiterieren. Allerdings wurde es mir zu umfangreich, die Daten dann noch sauber darzustellen.

          Viele Grüße
          Frank

          Comment


          • #6
            Hallo Frank,

            das Problem der Pivottabelle habe ich grundsätzlich lösen können.

            rudimentäres Schnipsel:
            Code:
                            <table border ="2">
                                <thead>
                                    @foreach(...)    Schleife über die zu listenden Werte. Damit werden die passenden Spalten angelegt, könnte auch mittels eines COUNT erledigt werden.
                                    <tr>
                                        <th>ColHeader</th>
                                    </tr>
                                </thead>
            
                                <tbody>
                                    <tr>
                                                foreach (var item in Model.Werte)      Schleife über alle Werte um die Datenspalten zu füllen
                                                {
                                                     <td class="Wert" width="70px">@item.Wert</td>
                                                }
                                    </tr>
                            </tbody>
                            </table>
            So schöne Sachen, wie Exporte nach Excel etc. kommen dabei natürlich nicht rum. Brauche ich aber auch nicht.

            Aktuell hänge ich noch daran, dass ich zur besseren Übersicht Dummy-Werte einfügen muss, die nicht in der DB enthalten sind, aber doch angezeigt werden müssen.
            Das führt zu einer ziemlichen Bastelei mit vielen IFs innerhalb des foreach.

            Ciao,
            N.

            Comment

            Working...
            X