Bei der Arbeit mit einiger Datenquelle braucht man manchmal Aliase für die Zelle der Tabelle. Es kann bequem sein, wenn die Felder nicht intuitiv verstanden werden oder die Sprache der Felder bei der Erstellung keine Muttersprache ist. Für mehr bequeme Arbeit mit solchem Datenlager steht FastReport Aliase zur Verfügung. Aber die Einstellung von Aliasen jedes Mal beim Erstellung von jedem neuen Bericht ist überhaupt nicht bequem. Auf solchen Gründen erzähle ich, wie man Aliase im Code erstellen kann. Das lässt diese Datenquelle in mehreren Berichten verwenden.
Ich erstelle eine in Deutsch lokalisierte Anwendung.
Man beachtet, dass die Datenquelle mit den Aliassen bei der Erstellung mit dem Menü File->New verfügbar sein muss. Dazu brauchen wir einen Eventsbearbeiter für das Menü „New“.
Verwenden wir eine WindowsForms Anwendung.
Fügen wir zwei Tasten hinzu.
Erste Taste – Start des Designers mit dem leeren Bericht. Zweite – Eröffnung des Demo-Berichts im Designer.
Fügen wir die Bibliotheken hinzu:
1 2 3 4 5 6 |
using FastReport; using FastReport.Utils; using FastReport.Data; using FastReport.Design; using FastReport.Wizards; using System.IO; |
Zuerst erstellen wir eine Erfassungsprozedur der Datenquelle für den Bericht.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
private void RegisterData(Report report) { // cteate any DataSet DataSet dataSet = new DataSet(); dataSet.ReadXml(Path.Combine(appPath, "nwind.xml")); // register data source in the report report.RegisterData(dataSet, "NorthWind"); // Loop through the tables. Override aliases have necessary tables. Activate visibility of the tables foreach (DataSourceBase dsItem in report.Dictionary.DataSources) { if (dsItem.Name == "Employees") { dsItem.Enabled = true; dsItem.Alias = "Mitarbeiter"; dsItem.Columns.FindByName("EmployeeID").Alias = "Identifier"; dsItem.Columns.FindByName("LastName").Alias = "Nachname"; dsItem.Columns.FindByName("FirstName").Alias = "Vorname"; dsItem.Columns.FindByName("Title").Alias = "City"; dsItem.Columns.FindByName("TitleOfCourtesy").Alias = "Titel"; dsItem.Columns.FindByName("BirthDate").Alias = "Geburtsdatum"; dsItem.Columns.FindByName("HireDate").Alias = "Datum der Beschäftigung"; dsItem.Columns.FindByName("Address").Alias = "Anschrift"; dsItem.Columns.FindByName("City").Alias = "Stadt"; dsItem.Columns.FindByName("Region").Alias = "Bereich"; dsItem.Columns.FindByName("PostalCode").Alias = "Index"; dsItem.Columns.FindByName("Country").Alias = "Land"; dsItem.Columns.FindByName("HomePhone").Alias = "Haustelefon"; dsItem.Columns.FindByName("Extension").Alias = "Area Code"; dsItem.Columns.FindByName("Photo").Alias = "Photographie"; dsItem.Columns.FindByName("Notes").Alias = "Hinweise"; dsItem.Columns.FindByName("ReportsTo").Alias = "Vorlage"; } } // set report parameters report.SetParameterValue("Die Testparameter 1", "Der Parameter 1 vor dem Aufruf des Berichts"); report.SetParameterValue("Parameter 2", "\"Der Parameter 2 Standard\""); } |
Wie Sie bemerkt haben, erstellten wir DateSet. Weiter, haben wir da einen XML Datenlager heruntergeladen und haben eine Datenquelle im Bericht registriert. Durch den Zyklus suchen wir in der Quelle die gebrauchte Tabelle – Employees. Aktivieren wir sie (Enabled = true). Das brauchen wir, damit die Tabelle im Datenfenster des Designers erscheint. Jetzt, setzen wir jedes Feld einen Alias – einen Namen in Deutsche.
Bearbeiten wir jetzt einen Downloads Event des Designers:
1 2 3 4 5 6 7 8 9 10 |
private string appPath; private void Designer_Load(object sender, EventArgs e) { appPath = Path.GetDirectoryName(Application.ExecutablePath); // load the German local for designer Res.LoadLocale(Path.Combine(appPath, "German.frl")); // intercept the load event of designer for further overriding the event handlers Config.DesignerSettings.DesignerLoaded += DesignerSettings_DesignerLoaded; } |
In den Ressourcen des Designers stellen wir eine Lokalisierungssprache ein – in unserem Fall „Deutsch“.
Weiter stellen wir dem Event DesignerLoaded unseren eigenen Bearbeiter, den wir so beschreiben.
1 2 3 4 5 6 7 8 9 |
// load event of designer private void DesignerSettings_DesignerLoaded(object sender, EventArgs e) { // intercept action of creating a new report for the registration of our sources and parameters (sender as Designer).cmdNew.CustomAction += new EventHandler(cmdNew_CustomAction); // except cmdNew. Similarly, you can intercept other Designer.cmd * and do anything inside, // for example, load report from database field and save it back } |
Hier stellen wir dem Wahlevent des Menüpunktes „New“ unseren Bearbeiter. Es wird sozusagen ein Eventsfang.
Beschreiben wir einen Bearbeiter für die Wahl zwischen den Punkten des Menüs „New“
1 2 3 4 5 6 7 8 9 10 11 12 13 |
void cmdNew_CustomAction(object sender, EventArgs e) { Designer designer = sender as Designer; // Use blank wizard to create blank report BlankReportWizard wizard = new BlankReportWizard(); //StandardReportWizard wizard = new StandardReportWizard(); // you can use other wizards // run wizard wizard.Run(designer); // register our data and parameters RegisterData(designer.Report); // update data tree designer.SetModified(this, "EditData"); } |
Hier verwenden wir einen leeren Designer. Erstellen wir ein Exemplar des Objekts BlankReportWizard. Wie aus dem Namen des Objekts folgt, ist das ein leerer Bericht. Weiter starten wir den Designer, erfassen wir die Datenquelle und erneuern wir den Datenbaum im Datenfenster.
Jetzt erstellen wir Bearbeiter für zwei Tasten. Die Taste für die Erstellung vom neuen Bericht.
1 2 3 4 5 6 7 8 9 |
// create new report private void btnNewReport_Click(object sender, EventArgs e) { using (Report report = new Report()) { RegisterData(report); report.Design(); } } |
Hier wird das Berichtsobjekt erstellt. Für ihn werden die Daten registriert.
Die Taste gilt für die Berichtsbearbeitung. Im Prinzip sieht alles gleich aus. Aber hier wird das Download des erstellten Berichtes hinzugefügt.
1 2 3 4 5 6 7 8 9 10 |
// edit report private void btnLoadReport_Click(object sender, EventArgs e) { using (Report report = new Report()) { report.Load(Path.Combine(appPath, "report.frx")); RegisterData(report); report.Design(); } } |
Vergessen wir nicht, dass die Berichte, Datenlager und Lokalisierungsdatei (German.frl) in einem Ordner mit der exe-Datei seien sollen.
Starten wir die Anwendung. Klicken wir auf die zweite Taste. Bekommen wir die Schablone des Berichts und eröffnen wir die Datenquelle im Datenbaum:
Dank Aliasen sind alle Felder und der Name der Tabelle auf Deutsch.
Und jetzt erstellen wir einen leeren Bericht mit Hilfe vom Menü File→New.
Und sehen wir noch unsere Datenquelle mit den Aliasen.
Wir erstellten eine Datenquelle und stellten Aliase den Feldern der Tabellen ein. Jetzt können wir diese Datenquelle mit dieser Aussicht in jedem Bericht verwenden.
Das Benutzen von Aliasen erleichtert wesentlich die Berichtserstellung den Entwickler, die keine Ahnung haben, welche Namen die Felder in einem oder anderem Datenlager haben. Sie können einmal Aliase einstellen und viele Fragen von anderen Berichtsentwicklern vermeiden.
Und zum Schluss der Bericht selbst: