Der Berichtsgenerator FastReport .NET verfügt über umfassende Anpassungsmöglichkeiten, d.h. über eine individuelle Einstellung. Aus dem Code der Benutzeranwendung können Sie mittels FastReport Bibliotheken eigene Elemente des Berichtsgenerators erstellen. So können Sie sowohl Ihren eigenen Berichtsdesigner als auch dessen Viewer erstellen.
Sie können im Berichtsdesigner auch Dialogfelder ändern, z. B. das Fenster zum Speichern von Dateien.
Der Quellcode des Berichtsgenerators bietet jedoch wirklich endlose Anpassungsmöglichkeiten. Sie können die vorhandenen Funktionen an Ihre Bedürfnisse anpassen oder neue hinzufügen. Heute werden wir gerade darüber sprechen, wie Sie Ihr eigenes Steuerelement zur Werkzeugpalette im Berichtsdesigner hinzufügen können.
Nehmen wir an, in Ihren Berichten verwenden Sie häufig ein Textobjekt mit bestimmten Einstellungen. Es wäre praktisch, ein vorkonfiguriertes "Text"-Objekt bereits mit einer bestimmten Schriftart oder Farbmarkierung zu haben, um diese Eigenschaften nicht jedes Mal manuell einzustellen.
Sie müssen nur Ihr eigenes Objekt erstellen! Dazu reicht es aus, Ihr Objekt von einem vorhandenen zu erben, wenn Sie dessen Funktionen erweitern oder ein komplett neues Objekt erstellen müssen.
Um ein eigenes Element für den Bericht zu erstellen, benötigen Sie die Quellcodes des FastReport .NET Berichtsgenerators. Schauen wir uns den Fall an, wo man ein eigenes Objekt basierend auf dem Text-Objekt erstellt. Dazu muss man zum Stamm des FastReport Projektes eine neue Klasse hinzufügen:
public class CustomerTextObject : TextObject { public override void OnBeforeInsert(int flags) { base.OnBeforeInsert(flags); Border.Lines = BorderLines.All; } }
In dieser Klasse haben wir das Ereignis vor dem Einfügen des Objektes neu definiert, in dem wir einen Standardwert für die Objektrahmen festgelegt haben. Somit hat unser Textobjekt sofort die eingefügten Rahmen. Wenn Sie weitere Objekteigenschaften vorgeben, haben Sie da auch kein Problem. Stellen wir die Farbe ein:
public override void OnBeforeInsert(int flags) { base.OnBeforeInsert(flags); Border.Lines = BorderLines.All; TextColor = System.Drawing.Color.Gray; }
Wenn Sie ein Objekt mit eigenen Funktionen erstellen möchten, müssen Sie von der Basisklasse ReportComponentBase erben. Aber dann, neben den Objekteigenschaften und seinem Verhalten müssen Sie auch die Rendering Draw()-Methode implementieren, anschließend in dem base.Draw() aufrufen und das Zeichen des Objekts hinzufügen.
Schauen wir uns das Beispiel für das Rendering eines Text-Objektes an:
public override void Draw(FRPaintEventArgs e) { base.Draw(e); DrawText(e); DrawMarkers(e); Border.Draw(e, new RectangleF(AbsLeft, AbsTop, Width, Height)); DrawDesign(e); }
Wie Sie sehen können, werden hier gleich mehrere Methoden aufgerufen: zum Rendering des Textes, der Marker, der Rahmen und des Editors.
Nachdem das eigene Objekt erstellt wird, muss es registriert werden, damit es auf der Werkzeugpalette des Berichtsdesigners angezeigt wird. Dafür verwenden wir die Methode FastReport.Utils.RegisteredObjects.Add() in der Klasse AssemblyInitializer.cs.
Beispiel für die Registrierung des Objektes, das wir zuvor erstellt haben:
RegisteredObjects.Add(typeof(CustomerTextObject), “ReportPage”, 120, 1);
Alle Parameter der Reihe nach: Name des zu registrierenden Objektes, Objektname der Berichtsseite, ID des Objektsymbols, Folgenummer des Objektes in der Werkzeugsleiste. Die Symbole werden in Ressourcen gespeichert. Sie können Ihr Bild im bmp-Format zu den Ressourcen hinzufügen oder es direkt an einen Methodenparameter anstelle einer Symbol-ID übergeben.
Jetzt können wir die Lösung kompilieren und den Berichtsdesigner starten. Ein weiteres Steuerelement wurde in der Werkzeugpalette angezeigt:
Wir haben das Symbol aus dem Text-Objekt verwendet, daher sieht es genauso aus. Fügen wir sie nun zur Berichtsseite hinzu und geben den Text ein:
Wie Sie sehen können, entsprechen sowohl die Rahmen als auch die Textfarbe unseren Einstellungen im Code. Wir haben ein “custom” Text-Objekt erstellt, das über voreingestellte Rahmen und Textfarben verfügt. Auf diese Weise können Sie jedes vorhandene Objekt im Bericht einstellen oder ein eigenes erstellen.