logo
small logo
  • Produkte
  • Shop
  • Support
  • Über uns
  • Customer panel Support
    • en
    • de
    • JP
    • ZH
  • Home
  • /
  • Articles
  • /
  • Kopieren von Berichtsbänder in einen anderen mit allen Inhalten
  • FastReport.NET packages and .NET 5.0

    17. Dezember 2020

    UPD: Gilt für die Versionen von FastReport .NET vor 2022.2. Lizenzpakete sind jetzt auf unserem

    read more
  • Berichte und PDF-Dokumente in der Blazor-Anwendung

    5. April 2021

    Microsoft hat kürzlich ein Web-Framework namens Blazor veröffentlicht. Mit diesem Framework kann man ein interaktives

    read more
  • Die FastReport Familie der Reportgeneratoren - kurze Overview

    23. März 2020

    Reporting – ein wichtiges Bereich, ohne es Aktivitäten im Alltagsleben richtig schwer vorzustellen. Bürokratie ist

    read more
  • How to create a Swiss QR bill in .NET application

    19. Mai 2020

    Recently many countries digitize payments. In other words, they convert existing payments to digital format.

    read more
  • Wie man in Blazor mehrere Berichte auf einer Seite anzeigt

    12. Juli 2022

    Häufig müssen unsere Benutzer zwei Berichte mit unterschiedlichen Daten auf derselben Seite anzeigen. Stellen

    read more

Kopieren von Berichtsbänder in einen anderen mit allen Inhalten

31. März 2021

Manchmal ist es notwendig, Teile eines Berichts in einem anderen zu verwenden. In einfachen Fällen können Sie dazu die Berichtsvererbung verwenden.

Zum Beispiel eine Situation, in der alle Berichte gemeinsame Elemente (Firmenlogo, Signatur usw.) enthalten. Diese Objekte können dann in den übergeordneten Bericht aufgenommen werden, und wenn Sie untergeordnete Berichte erstellen, werden sie automatisch kopiert. Dadurch entfällt die Notwendigkeit, jedes Mal manuell zu kopieren, was die Erstellung neuer Berichte erheblich vereinfacht und beschleunigt. Wenn Sie im übergeordneten Bericht etwas ändern, werden diese Änderungen auch in allen untergeordneten Berichten angezeigt.

Doch die Berichtsvererbung hat eine Reihe von Einschränkungen. Es gibt Situationen, in denen ein Bericht ein "Elternteil" hatte und es notwendig war, einen völlig anderen Bericht als Elternteil zu erstellen. Es scheint, dass es ausreicht, die Eigenschaft BaseReport zu ändern, aber leider wird es nicht funktionieren.

Diese Aufgabe kann jedoch auf ungewöhnliche Weise gelöst werden, indem die Bänder eines Berichts aus dem Code durch die Bänder eines anderen ersetzt werden.

Angenommen es gibt einen Basisbericht (base.frx), seine Bänder müssen in den untergeordneten Bericht (child.frx) kopieren werden. Ersetzen Sie die Bänder PageHeader, PageFooter und DataBand mit dem Namen "Data1". Im Folgenden Codebeispiel wird davon ausgegangen, dass sich beide Berichte im Stammordner von Laufwerk C befinden.

Zuerst müssen Sie beide Berichte herunterladen:

Report base = new Report();
base.Load(@"C:\base.frx");
Report child = new Report();
child.Load(@"C:\child.frx");

Der nächste Schritt besteht darin, die Seiten aus beiden Berichten abzurufen. Es ist wichtig, die Seitennamen zu kennen.  Im folgenden Beispiel wird davon ausgegangen, dass der Seitenname in beiden Berichten "Page1" ist:

ReportPage basePage = base.FindObject("Page1") as ReportPage;
ReportPage childPage = child.FindObject("Page1") as ReportPage;

Wenn die Seitennamen nicht bekannt sind, können Sie sie nach Index abrufen. Als nächstes erhalten Sie beispielsweise Zugriff auf die ersten Seiten beider Berichte:

ReportPage basePage = baseReport.Pages[0] as ReportPage;
ReportPage childPage = childReport.Pages[0] as ReportPage;

Beide Optionen sind angemessen und führen zu demselben Ergebnis.

Jetzt können Sie PageHeader und PageFooter ersetzen. Hier ist alles einfach:

childPage.PageHeader = basePage.PageHeader;
childPage.PageFooter = basePage.PageFooter;

Mit diesen Zeilen werden zwei Bänder mit allen Eigenschaften und Einstellungen kopiert. Außerdem werden alle darauf befindlichen Objekte dupliziert, und die Eigenschaften werden nicht verloren.

Als nächstes ersetzen wir DataBand mit dem Namen "Data1":

DataBand baseBand = basePage.FindObject("Data1") as DataBand;
DataBand childBand = childPage.FindObject("Data1") as DataBand;
// sie müssen den Data1-Index im untergeordneten Bericht abrufen
int childBandIndex = childPage.Bands.IndexOf(childBand);
// es kann jetzt gelöscht werden
childPage.Bands.Remove(childBand);
// und ein Band aus dem Basisbericht an seine Stelle einfügen
childPage.Bands.Insert(bandIndex, baseBand);

Am Ende wurde das Band mit allen Eigenschaften und untergeordneten Objekten kopiert. Außerdem wurde die Bindung an die Datenquelle verschoben, für die die Eigenschaft DataSource verantwortlich ist. Ohne diese Bindung funktioniert das Band nicht richtig und gibt die Daten aus der Datenbank aus.

Es bleibt nur, die Datenquellen zu kopieren. Dies geschieht durch das folgende Code-Snippet:

for (int i = 0; i < baseReport.Dictionary.DataSources.Count; i++)
{
 childReport.Dictionary.DataSources.Add(baseReport.Dictionary.DataSources[i]);
}

Auf diese Weise wurden alle Datenquellen kopiert. Wenn das nicht notwendig ist, können Sie nur die benötigten Datenquellen klonen.

Das ist alles. Ein paar Dutzend Codezeilen ermöglichten es, Bänder und Objekte von einem Bericht in einen anderen zu kopieren. Wenn es viele Objekte auf den Bändern gibt, ist es ziemlich lang und routine, sie mit Hilfe des Designers zu duplizieren, und es ist noch länger, sie neu zu erstellen.

Wenn der Basisbericht nur die in diesem Beispiel kopierten Bänder enthält, kann diese Aufgabe natürlich noch einfacher durchgeführt werden - mit einem banalen Kopierer der Berichtsdatei. Im Ernstfall können Sie auf diese Weise eine oder mehrere Bänder aus einer Menge kopieren, wenn sie alle in einem neuen Bericht nicht benötigt werden. Oder Sie können den Seitentitel aus einem Bericht, ein Band mit Daten aus einem anderen Bericht und einen Seitenfußboden aus einem dritten Bericht nehmen.

about product buy
avatar
Oleg Kojnikov
.NET Development
Fast Reports Team: Oleg Kojnikov - NET Development at Fast Reports
.NET FastReport C#

Add comment
logo
  • 800-985-8986 (English, US)
  • +4930568373928 (German)
  • +55 19 98147-8148 (Portuguese)
  • info@fast-report.com
  • 901 N Pitt Str #325 Alexandria VA 22314
  • Shop
  • Download
  • Dokumentation
  • Referenzen
  • Informationen zur Deinstallation unserer Produkte
  • FAQ
  • Tutorial Video
  • Forum
  • Articles
  • Unsere Nachrichten
  • Presse über uns
  • Partner
  • Außergewöhnliche Lizenzierung
  • Kontakte

© 1998-2023 by Fast Reports Inc.

  • Datenschutz