From 0baccc63d7ee5ab17c47589d3836f38e9395fcbd Mon Sep 17 00:00:00 2001 From: KoCoder Date: Mon, 23 Mar 2026 02:55:04 +0100 Subject: [PATCH] New: Event Registration Pie Chart --- ...individueller-teil-Konstantin-Hintermayer.md | 6 +++--- .../EventRegistration-PieChart.png | Bin 0 -> 12006 bytes 2 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 images/05-Konstantin/EventRegistration-PieChart.png diff --git a/05-Diplomarbeitsbuch-individueller-teil-Konstantin-Hintermayer.md b/05-Diplomarbeitsbuch-individueller-teil-Konstantin-Hintermayer.md index f7ac9da..7c68928 100644 --- a/05-Diplomarbeitsbuch-individueller-teil-Konstantin-Hintermayer.md +++ b/05-Diplomarbeitsbuch-individueller-teil-Konstantin-Hintermayer.md @@ -752,8 +752,6 @@ erDiagram \ -# TODO: Bild vom Grafen hier einfügen - Ein wesentlicher Teil der administrativen Ansicht ist die Visualisierung der Anmeldezahlen. Hierfür wurde eine Integration von Chart.js realisiert, um den aktuellen Stand der Rückmeldungen grafisch aufzubereiten. Um die Brücke zwischen dem C#-basierten Blazor-Frontend und der JavaScript-Bibliothek Chart.js zu schlagen, wurde ein dedizierter Interop-Service implementiert. Der JS-Interop-Layer ist zwar standardmäßig in Oqtane-Modulen vorgesehen, wurde jedoch in diesem Modul zum ersten Mal angepasst und produktiv eingesetzt. Der Ablauf der grafischen Darstellung gestaltet sich wie folgt: @@ -762,7 +760,9 @@ Um die Brücke zwischen dem C#-basierten Blazor-Frontend und der JavaScript-Bibl 2. JS-Interop: Über die `CreateChart`-Methode der Interop-Klasse wird die JavaScript-Funktion `createChart` in der `Module.js` aufgerufen. Dabei werden die aggregierten Daten, Beschriftungen und Konfigurationsoptionen übergeben. 3. Canvas-Rendering: Die JavaScript-Logik erzeugt dynamisch ein HTML5-canvas-Element innerhalb eines Container-Divs und initialisiert daraufhin die Chart.js-Instanz, welche ein übersichtliches Pie-Chart mit den Registrierungsstatistiken rendert. -Durch diese Trennung bleibt die Geschäftslogik im C#-Code, während für die performante und ansprechende Darstellung auf etablierte Web-Technologien zurückgegriffen wird. +Durch diese Trennung bleibt die Geschäftslogik im C#-Code, während für die performante und ansprechende Darstellung auf etablierte Web-Technologien zurückgegriffen wird. + +![EventRegistration Pie Chart](./images/05-Konstantin/EventRegistration-PieChart.png){ width=40% fig-pos=H } ### Schwarzes Brett diff --git a/images/05-Konstantin/EventRegistration-PieChart.png b/images/05-Konstantin/EventRegistration-PieChart.png new file mode 100644 index 0000000000000000000000000000000000000000..174b0953b7ddcfd24c0190bdf48a424131cd1a85 GIT binary patch literal 12006 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 TEyUEV0|3hMaJh0Bvk(6VITp`c literal 0 HcmV?d00001