Wie man einen Bericht aus dem Code einer Webanwendung erstellt

Wie man einen Bericht aus dem Code einer Webanwendung erstellt

Manchmal kann die Erstellung eines Berichts echtes Kopfzerbrechen bereiten. Zum Beispiel, wenn Sie den Inhalt eines Berichts je nach den Bedingungen im Programm steuern müssen. Es ist einfacher, dies im Programmcode zu tun, als Parameter an den Bericht zu übergeben und die Logik im Berichtsskript zu organisieren.

Heute werden wir beleuchten, wie man einen Bericht aus dem Code einer Anwendung erstellt, aber nicht einer normalen Desktop-Anwendung, sondern einer Web-Anwendung auf ASP.NET Core MVC. Wir haben bereits beleuchtet, wie man einen Bericht im Code der WinForms-Anwendung erstellt. Aber heutzutage sind Web-Anwendungen viel beliebter und viele FastReport-Benutzer würden gerne alle Funktionen dieses Berichtsgenerators in ihnen nutzen.

Sehen wir uns an, wie Sie eine Berichtsvorlage erstellen und ausführen, ohne den Berichtsdesigner zu verwenden. Zunächst benötigen wir ein ASP.NET Core MVC-Anwendungsprojekt. Um mit dem FastReport.NET-Berichtsgenerator zu arbeiten, müssen Sie seine Bibliotheken mit dem NuGet-Paketmanager installieren.

Da sich die Bibliothekspakete auf dem lokalen Laufwerk befinden (im Verzeichnis des installierten Programms im NuGet-Ordner), müssen wir eine lokale Paketquelle hinzufügen. Klicken Sie dazu auf das Zahnradsymbol in der oberen rechten Ecke des Paketmanagers und fügen Sie eine neue Quelle hinzu, die auf den lokalen Ordner verweist, der Ihre Pakete enthält (mit der Erweiterung .nupkg):

Hinzufügen einer neuen lokalen Paketquelle

Sie können nun die hinzugefügte Paketquelle aus der Dropdown-Liste auswählen und die Pakete installieren. 

Von einer lokalen Quelle installierte Pakete

Um die hinzugefügten Bibliotheken im Programmcode zu verwenden, müssen Sie sie zunächst in der Datei Startup.cs aktivieren. Fügen Sie der Konfigurationsmethode eine Zeile hinzu:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
 {

app.UseFastReport();

}

Jetzt können Sie direkt zur Programmierung übergehen. Unser MVC-Projekt hat:

  1. Controller, die die serverseitige Logik der Anwendung enthalten.
  2. Ansichten zeigen dem Kunden Informationen an.
  3. Modelle sind für den Umgang mit Daten verantwortlich (Empfang, Speicherung, Umwandlung und Aufzeichnung).

In unserem einfachen Beispiel benötigen wir nur einen Controller und eine Ansicht. Ändern wir die Index-Methode im Controller. In unserer Anwendung, die automatisch aus einer Vorlage generiert wird, haben wir bereits einen vorgefertigten Controller, HomeController:

using FastReport.Web;
using FastReport;
using FastReport.Table;
using System.Data;
using FastReport.Data;
using System.Drawing;
using FastReport.Utils;
 
 public IActionResult Index()
 {
 //Erstellen eines Web-Berichtobjekts 
 WebReport report = new WebReport();
 
//Erstellen eines Webseitenobjekts
 ReportPage page = new ReportPage();
 page.Name = "Page1";
 
//Hinzufügen einer Seite zum Bericht
 report.Report.Pages.Add(page);
 
 //Erstellen einer Datenquelle
 DataSet ds = new DataSet();
 ds.ReadXml("C:/Users/FR/source/repos/WebApp/WebApp/Reports/nwind.xml");
 
 //Registrieren der Datenquelle im Bericht
 report.Report.RegisterData(ds);
 
 //Einfügen einer Tabelle in den Bericht
 report.Report.GetDataSource("Products").Enabled = true;
 
//Erstellen des Datenbands
 DataBand dataBand = new DataBand();
 dataBand.Name = "DataBand";
 
 //Erzeugung der Tabelle aus der Berichtsdatenquelle
 DataSourceBase data = report.Report.GetDataSource("Products");
 //Initialisieren der Datenquelle
 data.Init();
 //Erzeugung der ersten Datenzeile
 data.First();
 
 //Hinzufügen eines Datenbandes zur Seite
 page.Bands.Add(dataBand);
 
 //Erstellen eines Tabellenobjektes
 TableObject table = new TableObject();
 table.Name = "Table1";
//Festlegen der Zeilenanzahl - Zeilenanzahl in der Quelle + Kopfzeile
 table.RowCount = data.RowCount+1;
 //Festlegen der Spaltenanzahl
 table.ColumnCount = 2;
 
//Einstellen des automatischen Anpassens der Breite der ersten Spalte, in der die Produktnamen angezeigt werden 
 table.Columns[0].AutoSize = true;
 //Festlegen von Kopfzeilen in der ersten Tabellenzeile 
 table[0, 0].Text = "Product Name";
 table[0, 0].Border.Lines = BorderLines.All;
 table[1, 0].Text = "Unit Price";
 table[1, 0].Border.Lines = BorderLines.All;
 
 int i = 1;
 //Durchlaufen durch alle Zeilen der Datenquelle 
 while(data.HasMoreRows)
 { 
 //Anzeige von Produktnamen
 table[0, i].Text = data["ProductName"].ToString();
 table[0, i].Border.Lines = BorderLines.All;
 //Anzeige von Preisen
 table[1, i].Text = data["UnitPrice"].ToString();
 table[1, i].Border.Lines = BorderLines.All;
 
//Erstellen des Bildobjekts
 PictureObject picture = new PictureObject();
 picture.Bounds = new RectangleF(40, 0, Units.Centimeters * 0.5f, Units.Centimeters * 0.5f);
 picture.CreateUniqueName();
 //Je nach dem Preis wählen wir aus, welches Bild in der Tabellenzelle angezeigt werden soll 
 if ((decimal)data["UnitPrice"] < 20)
 {
 picture.Image = Image.FromFile("C:/Users/FR/Downloads/28.png");
 }
 else 
 {
 picture.Image = Image.FromFile("C:/Users/FR/Downloads/29.png");
 }
 
 picture.LoadImage(); 
//Laden des Bildes in das Objekt
 picture.Parent = table[1, i]; 
//Zuweisen des übergeordneten Objekts für das Bild - die Tabellenzelle
 i++;
 data.Next(); 
//Der nächste Datensatz aus der Quelle 
 }
 
 dataBand.Objects.Add(table); 
//Hinzufügen eines Tabellenobjekts zur Berichtsseite
 
 ViewBag.WebReport = report; 
//Übertragen des Berichts in die Ansicht
 return View();
 }

Aus den Kommentaren zum Code geht hervor, dass wir die Berichtsobjekte manuell erstellen und ihre Hierarchie aufbauen. Wir haben nun einen tabellarischen Bericht mit Bildern in den Zellen erstellt. Je nach dem Preis wird das gewünschte Bild ausgewählt. Dies ist ein typisches Beispiel, wenn Sie eventuell einen Bericht aus dem Programmcode erstellen müssen.

Ändern wir nun die Ansicht der Index.cshtml. Lassen wir nur eine Zeile übrig:

@await ViewBag.WebReport.Render()

Das wäre alles. Sie können die Anwendung ausführen und unseren Bericht einsehen:

So sieht der fertige Bericht aus

Als Fazit lässt sich festhalten, dass sich das Erstellen eines Berichts aus dem Code einer Web-Anwendung von einer normalen Desktop-Anwendung tatsächlich nicht unterscheidet. Einerseits erfordert die Erstellung eines Berichts aus dem Code ziemlich fundierte Kenntnisse über die Struktur des Berichtes und seine Objekte, was bedeutet, dass ein qualifizierter Fachmann den Bericht erstellen muss. Andererseits ist es manchmal die einzige Möglichkeit, einen Bericht mit komplexer Logik zu erstellen. Daher sollten Sie diese Methode der Berichtserstellung nicht als Basis betrachten. Aber sie wird Ihnen in Notsituationen helfen.

Fast Reports
  • 800-985-8986 (Englisch, die USA)
  • +4930568373928 (Deutsch)
  • +55 19 98147-8148 (Portugiesisch)
  • info@fast-report.com
  • 901 N Pitt Str #325 Alexandria VA 22314

© 1998-2024 Fast Reports Inc.
Trustpilot