Heute werden wir uns nicht einen einfachen Bericht mit dem Band-orientiertem Ansatz ansehen, der normalerweise in FastReport verwendet wird. Zum Beispiel ein Umsatzbericht nach Jahr, Quartal und Monat, der drei Datentabellen benötigt, die aber von links nach rechts und nicht von oben nach unten angezeigt werden sollen. Glücklicherweise können wir einen solchen Bericht in FastReport .NET mithilfe einiger "Matrix"-Objekte erstellen.
Schauen wir uns also zunächst einmal die Daten an. Sie werden zufällig, nach einem bestimmten Muster, erzeugt:
Die Datenbank speichert Daten über den Import von Obsten aus verschiedenen Ländern, aufgeteilt nach Monaten. Jeder Datensatz hat ein Feld "amount", in dem die Menge der importierten Früchte gespeichert wird.
Wir werden das Matrix-Objekt für Datenausgabe verwenden. Schauen wir uns nun die Einstellungen an:
Der Landesname und die Fruchtart werden unsere Zeilen sein, die Zeilen werden die Aufschlüsselung nach Jahr, Quartal und Monat sein, und schließlich wird die Anzahl der Früchte die Zelle der Matrix sein.
Wir haben also festgelegt, welche Daten in der Matrix verwendet werden sollen. Fügen wir Rahmen für alle Zellen ein, und passen wir die Seitenparameter an. Um den Bericht auf einem einzigen Blatt anzuordnen, aktivieren wir "unbegrenzte Höhe" und "unbegrenzte Breite". Danach erstellen wir einen Bericht, der wie folgt aussehen wird:
Die Daten setzen sich rechts für 2018 und 2019 fort.
Beachten wir zunächst, dass die Summen für alle Spalten automatisch hinzugefügt wurden. Wenn sie nicht benötigt werden, können sie entfernt werden, was wir auch tun werden. Um Nullen anstelle von leeren Zellen anzuzeigen - müssen wir die Eigenschaft NullValue der Zelle einstellen. Als Ergebnis sollte es 0 enthalten. Außerdem deaktivieren wir die automatische Größe in der Tabelle und stellen das Ergebnis ein:
Unsere Aufgabe ist Erstellen einer Statistik mit mehreren Matrizen:
1) Nach Jahr;
2) Nach Quartalen;
3) Nach Monaten.
Kopieren wir die Matrix und legen wir die beiden Kopien neben das Original. Schalten wir „zusätzlicher Platz im Designer“ ein, um sicherzustellen, dass alles passt. Beachten Sie, dass die Matrix beim Kopieren von den Daten abgetrennt wird und Sie die gewünschte Datentabelle in der Eigenschaft DataSource auswählen müssen.
Entfernen wir unnötige Felder aus den Matrizen und legen wir sie näher aneinander:
Lassen wir uns versuchen, einen solchen Bericht zu erstellen:
Wie Sie sehen können, gibt es mehrere Probleme in dem Bericht:
1) Durch die unterschiedliche Höhe der Kopfzeilen werden die Matrizen nicht gleich dargestellt;
2) Länder und Fruchtarten werden in der zweiten und dritten Matrize wiederholt.
Erhöhen wir die Höhe der Zeile "Jahr" in der ersten und zweiten Matrize. Um eine Zeile auszuwählen, können Sie mit der Maus über die linke Seite der Matrix fahren. Wenn sich die Maus über einer der Zeilen befindet, verwandelt sie sich in einen schwarzen Rechtspfeil. Sie können auch eine Zeile im Berichtsbaum auswählen:
Und jetzt haben alle Kopfzeilen die gleiche Höhe:
Matrizen in FastReport ermöglichen es Ihnen, eine Spalte oder Zeile "auszublenden", indem Sie deren Größe auf Null reduzieren. In unserem Fall müssen wir den "Ländernamen" mit "Obst" in der zweiten und dritten Matrize ausblenden. Wählen wir eine Spalte aus und reduzieren ihre Eigenschaft Width (Breite) auf Null:
Nach mehrmaliger Wiederholung dieser Manipulation, sowie nach dem Verschieben von Matrizen in die Nähe zueinander, erhalten wir dieses Muster:
Beachten Sie, dass dies immer noch drei separate Matrizen sind, nicht eine. Da sie aber identische Kopf- und Zellenhöhen und denselben Datensatz haben, funktionieren sie als eine komplexe Matrix.
Lassen Sie uns nun einen Blick auf den Bericht werfen:
Auf diesem Screenshot sehen Sie, dass die Ländernamen jetzt nicht mehr angezeigt werden und dass es keine Diskrepanz zwischen den Matrizen gibt.
Zum Schluss wollen wir unsere Matrix noch ein wenig verschönern:
Um z. B. zum Jahreszahl ein Wort hinzuzufügen, müssen Sie daran denken, dass es in den Matrixfeldern Ausdrücke gibt. Wenn das Feld einen solchen Text enthält, wird ein Fehler angezeigt:
Year [fruit_import_database.year]
Dies sollte auf folgende Weise geschehen:
"Year " + [fruit_import_database.year]