Wie man einen Tabellenbericht aus dem Native-Code programmgesteuert erstellt

Wie man einen Tabellenbericht aus dem Native-Code programmgesteuert erstellt

Erinnern wir uns an eine ziemlich häufige Situation, in der Sie etwas sehr schnell und buchstäblich „auf den Knien“ tun müssen. Wir dürfen jedoch nicht vergessen, dass die Struktur und der Inhalt eines Berichts von externen Faktoren abhängen. Der FastReport.NET-Berichtsgenerator ist ein sehr flexibles Produkt und bietet Ihnen zwei Möglichkeiten, dieses Problem zu lösen.

Methode 1. Erstellen einer Berichtsstruktur im Code der Benutzeranwendung.
Methode 2. Interne Steuerung des Berichtsverhaltens mithilfe eines Skripts.

Es gibt ziemlich viele Informationen darüber, wie man bestimmte Verhaltensmerkmale in ein Berichtsskript implementiert. Es gibt jedoch nur wenige Beispiele dafür, wie man einen Bericht aus dem Code erstellen kann. In diesem Artikel werden wir also einen Bericht mit einer Tabelle aus dem Anwendungscode erstellen und beleuchten, wie man die Tabelle mit Daten füllt und ein Objekt in einer Tabellenzelle platziert. Die Methode 2 wird in einem anderen Artikel ausführlicher behandelt.

Das Objekt Tabelle (Table) kann mit statischen oder dynamischen Daten gefüllt werden. Im ersten Fall kennen wir die spezifischen Abmessungen der Tabelle und tragen die Daten sofort aus einem festen Satz in die Zellen ein.

Im zweiten Fall wird die Tabelle dynamisch aufgebaut, Zeilen (Spalten) werden je nach den Daten in der Quelle hinzugefügt. Sie können jedoch auch die Größe der Tabelle begrenzen und fixieren.

Lassen Sie uns eine WinForms-Anwendung erstellen. Aktivieren Sie in den Links die FastReport.dll-Bibliothek, die Sie im Ordner mit dem installierten Berichtsgenerator finden. Fügen Sie dem Formular eine Schaltfläche hinzu, über die der Bericht erstellt wird. Und vergessen Sie nicht, einen Click-Handler dafür zu erstellen.

Aktivieren Sie zunächst die FastReport-Bibliotheken.

using FastReport;
using FastReport.Data;
using FastReport.Table;
using FastReport.Utils;
 
private void button1_Click(object sender, EventArgs e)
{
using (Report report = new Report()) 
//Erstellen eines Berichtsobjekts
 {
 ReportPage page = new ReportPage(); 
//Erstellen eines Berichtsseitenobjekts
 page.Name = "Page1"; 
//Festlegen des Seitennamens
 report.Pages.Add(page); 
//Hinzufügen einer Seite zur Berichtsseitensammlung
 DataSet ds = new DataSet(); 
//Erstellen einer Datenquelle
 ds.ReadXml("~/../../../App_Data/nwind.xml"); 
//Laden der xml-Datenbank hinein
 report.RegisterData(ds); 
//Registrieren der Datenquelle im Bericht
 report.GetDataSource("Products").Enabled = true; 
//Einschalten der Datenquelle
 DataBand dataBand = new DataBand(); 
//Erstellen eines Datenbandes
 dataBand.Name = "DataBand"; 
//Festlegen des Band-Namens
 page.Bands.Add(dataBand); 
//Hinzufügen eines Bands zur Bandsammlung der Seite
 
 TableObject table = new TableObject(); 
//Erstellen des Tabellenobjekts
 table.Name = "Table1"; 
//Festlegen des Objektnamens 
 table.RowCount = 10; 
// Festlegen der Zeilenanzahl 
 table.ColumnCount = 2; 
//Festlegen der Spaltenanzahl
 
//Füllen aller Zellen im Zyklus mit einigen Daten
 for (int i = 0; i < 10; i++)
 for (int j = 0; j < 2; j++)
 {
 table[j, i].Text = (10 * i + j + 1).ToString();
 table[j, i].Border.Lines = BorderLines.All;
 }
 
 dataBand.Objects.Add(table);
 //dataBand.Objects.Add(picture);
 if (report.Prepare())
 report.ShowPrepared();
 }

 

Mit beliebigen Daten gefüllte Tabelle

Betrachten wir nun den Fall, dass die Tabelle mit Daten aus einer Quelle gefüllt werden muss. Ersetzen Sie den obigen Zyklus durch anderen Code:

table.Columns[0].AutoSize = true;
 //table.Columns[1].AutoSize = true;
 
 DataSourceBase data = report.GetDataSource("Products");
 data.Init(); 
//Initialisieren der Datenquelle
 data.First(); 
//Der erste resultierende Datensatz
 
 for (int i = 0; i < 10; i++)
 {
 table[0, i].Text = data["ProductName"].ToString();
 table[0, i].Border.Lines = BorderLines.All; 
//Festlegen der Rahmen
 table[1, i].Text = data["UnitPrice"].ToString();
 table[1, i].Border.Lines = BorderLines.All;
 data.Next();
 }

Als Ergebnis erhalten wir eine Tabelle mit Daten aus der Datenbank:

Mit Daten aus der Datenbank gefüllte Tabelle

Ohne Kopfzeile sieht die Tabelle unvollständig aus. Fügen wir sie hinzu:

table.RowCount = 11;

 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;
 
 for (int i = 1; i < 10; i++)
 {
 table[0, i].Text = data["ProductName"].ToString();
 table[0, i].Border.Lines = BorderLines.All;
 
 table[1, i].Text = data["UnitPrice"].ToString();
 table[1, i].Border.Lines = BorderLines.All;
 
 data.Next();
 }

Zur Verdeutlichung: In der ersten Zeile der Tabelle haben wir die Kopfzeilen festgelegt, so dass der Zyklus nicht mit dem ersten, sondern mit dem zweiten Element beginnt.

Tabelle mit Kopfzeilen

Betrachten wir den letzten Fall für heute und zwar, wie man ein Objekt, zum Beispiel ein Bild in eine Tabellenzelle einfügt:

PictureObject picture = new PictureObject();
 //Erstellen des Bildobjekts
 picture.Bounds = new RectangleF(40, 0, Units.Centimeters * 0.5f, Units.Centimeters * 0.5f); 
//Festlegen der Objektgröße
 picture.CreateUniqueName(); 
//Festlegen eines beliebigen Namens
 picture.Image = Image.FromFile("C:/Users/FR/Downloads/28.png"); 
//Festlegen des Pfads zum Bild
 picture.LoadImage(); 
//Hochladen eines Bildes
 picture.Parent = table[1, 1]; 
//Festlegen des übergeordneten Objekts für das Bild

Es ist die Eigenschaft Parent, die sich auf die Anzeige des Bildes in der Zelle auswirkt. Werfen wir einen Blick darauf, wie es aussehen wird:

Tabelle mit einem Bild in der Zelle

Wir haben also beleuchtet, wie man eine Tabelle in einem Bericht aus dem Anwendungscode erstellt und welche zwei Möglichkeiten es gibt, sie mit statischen und dynamischen Daten zu füllen. Außerdem kennen Sie jetzt die Möglichkeiten, ein Objekt programmgesteuert zu einer Tabellenzelle hinzuzufügen.

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