Benutzer von FastReport VCL Ultimate haben wahrscheinlich bereits bemerkt, dass im Installer zwei neue Einträge erschienen sind: FastEditors VCL und FastGrid VCL. Außerdem wurde im DemoCenter eine neue Demo hinzugefügt – FastGrid VCL Demo.
FastGrid ist eine Bibliothek zur Visualisierung, Bearbeitung und Strukturierung von Daten unter VCL und Lazarus. Sie besteht aus einer Tabelle – einem Schlüsselelement der visuellen Programmierung – und ermöglicht die übersichtliche Darstellung von Daten. Sie wird aktiv in Anwendungen für die Arbeit mit Datenbanken, Tabellen und Listen eingesetzt. Mit FastGrid lassen sich benutzerfreundliche und leistungsfähige Programme zur Informationsverarbeitung erstellen.
Die integrierten Funktionen zur Filterung, Sortierung und Strukturierung von Daten vereinfachen die Entwicklung erheblich. Sie reduzieren den Arbeitsaufwand, ersparen übermäßige Programmierarbeit und ermöglichen es, sich auf die Geschäftslogik zu konzentrieren.
Let's try creating a small data viewing application. This application will use the demo database included with , namely demo.mdb. Versuchen wir, eine kleine Anwendung zur Datenanzeige zu erstellen. In dieser Anwendung verwenden wir die Beispieldatenbank aus dem FastReport VCL-Lieferumfang, nämlich demo.mdb.
Platzieren Sie ein TADOConnection, eine TADOTable, und eine TDataSource auf dem Formular. Konfigurieren Sie TADOConnection für die Beispieldatenbank demo.mdb (wenn Sie das DemoCenter installiert haben, befindet sich diese Datenbank standardmäßig im Ordner "C:\Users\Public\Documents\Fast Reports\VCL\Feature Demos\FastReport VCL Demo\Data\". Sie finden sie auch in den mit FastReport mitgelieferten Beispielverzeichnissen). Verknüpfen Sie die TADOTable mit der Datenbanktabelle „customer“ und öffnen Sie sie. Damit ist alles bereit für die Erstellung Ihrer ersten Anwendung mit FastGrid.
Im zweiten Schritt platzieren Sie das FastReport-Grid auf dem Formular. Sie finden es auf der Komponentenpalette im Reiter „FastControls VCL“. Alle Komponenten in diesem Reiter werden von uns aktiv in unserer Arbeit eingesetzt, und Sie können sie bei der Bearbeitung und Vorschau von Berichten sehen.
Nun verbinden wir unser Grid mit den Daten. Beachten Sie, dass das Grid eine komplexe Komponente ist. Auf dem Grid können sich eine oder mehrere View-Elemente befinden, die die Daten anzeigen. Außerdem kann sich auf dem Grid ein Datennavigator befinden.
In der unteren linken Ecke des Grids sehen Sie die „Legende“. Die Legende zeigt das Grid selbst sowie die darauf liegenden weiteren Komponenten. Klicken Sie in der Legende mit der Maus auf das Element frGridTableView1. Nun werden im Objektinspektor die Eigenschaften des auf dem Grid liegenden Views angezeigt. Suchen Sie nun im Objektinspektor die Eigenschaft DataController und klappen Sie sie auf. Setzen Sie anschließend die Eigenschaft DataController.DataSource auf DataSource1. Nun ist der aktuelle View mit den Daten verbunden.
Aber wie werden nun die Daten selbst angezeigt? Im standardmäßigen DBGrid werden die Daten automatisch angezeigt. Bei uns müssen jedoch zuerst die anzuzeigenden Felder hinzugefügt werden. Öffnen Sie die mit dem Grid verbundene Tabelle. Klicken Sie dann mit der rechten Maustaste auf die Legende, dann auf die Zeile mit unserem View und wählen Sie im Kontextmenü „Add missing columns“. Wie der Name schon sagt, fügt dieser Menüpunkt dem aktuellen View alle Felder aus dem verbundenen DataSource hinzu, die dort noch fehlen. Da bei uns alle Felder fehlen, werden alle Felder hinzugefügt. Das Ergebnis sollte etwa wie in der Abbildung unten aussehen. Alternativ hätte man auch den Menüpunkt „Link to DataSource“ wählen können – dann hätte sich das Grid sofort verbunden und alle Felder aus der Datenquelle erstellt. Die Befehle in diesem Menü ermöglichen es auch, alle Felder aus dem Grid zu entfernen oder nur ein einzelnes Feld zur weiteren Konfiguration im Objektinspektor hinzuzufügen.
Bearbeiten wir nun das entstandene Grid ein wenig. Entfernen wir die Felder Addr2, Zip, Fax, State, TaxRate. Dazu klicken Sie einfach mit der rechten Maustaste auf den Spaltenkopf und wählen „Delete“. Bei Bedarf können wir die Spaltenbreiten direkt im Designer mit der Maus anpassen. Nun fügen wir einen Datennavigator für das Grid hinzu – wechseln Sie zu den Eigenschaften des Views und setzen Sie OptionsView.ShowDataNavigator := True.
Wir betonen ausdrücklich, dass in der Eigenschaft OptionsView die allgemeinen Parameter zusammengefasst sind, die das Erscheinungsbild des Grids beeinflussen. Die Position und andere Parameter, einschließlich der anzuzeigenden Schaltflächen des Datennavigators, können in der Eigenschaft OptionsDataNavigator konfiguriert werden. Danach erhalten wir im IDE-Editor das folgende Ergebnis:
Gehen wir kurz die übrigen Eigenschaften des Views durch:
OptionsData. Hier können die erlaubten Datenoperationen konfiguriert werden.OptionsCustomization legt fest, welche Aktionen dem Benutzer erlaubt sind (kann er Daten sortieren und filtern, Spaltengrößen ändern und Spalten verschieben).DataController. Konfiguration der Datenanbindung.OptionsView. Verschiedene Einstellungen zum Erscheinungsbild des Grids.„Appearance...“ beginnen, betreffen hauptsächlich das Aussehen verschiedener Grid-Elemente und deren Vererbung vom übergeordneten Element. Diese Eigenschaften werden in späteren Artikeln detaillierter betrachtet.Starten wir nun die erstellte Anwendung und schauen wir, was ein normaler Benutzer damit machen kann.
Ein Benutzer kann tatsächlich recht viel tun. Beispielsweise wird beim Klick auf einen Spaltenkopf die Sortierung der Werte ausgelöst. Im Screenshot haben wir das Grid nach dem Feld „Contact“ sortiert.
Wenn wir mit der Maus über einen Spaltenkopf fahren, stellen wir fest, dass dort ein Filtersymbol erscheint. Klicken wir auf dieses Symbol, erhalten wir die Möglichkeit, die Daten zu filtern.
Jeder Benutzer kann Spalten per Maus verschieben und deren Größe ändern – vorausgesetzt, Sie als Entwickler haben diese Aktionen erlaubt. Außerdem können in FastGrid nicht benötigte Spalten ausgeblendet werden. Dazu klickt man mit der linken Maustaste in die obere linke Ecke des Grids und aktiviert oder deaktiviert im erscheinenden Fenster die gewünschten Spaltennamen. Der Screenshot zeigt genau diesen Modus zum Ein- oder Ausblenden von Spalten.
Beachten Sie, dass die Spalte „CustNo“ UpDown-Elemente enthält. Das Grid hat automatisch erkannt, dass es sich um ein Zahlenfeld handelt, und den entsprechenden Editor für die Bearbeitung ausgewählt.
Bei Bedarf können Sie den Editor für ein Feld selbst auswählen. Wählen Sie dazu im IDE-Designer die gewünschte Spalte aus. Gehen Sie dann im Objektinspektor zur Spalteneigenschaft „Properties“ und wählen Sie den gewünschten Wert aus der Dropdown-Liste. Nach der Auswahl des Editors wird die Eigenschaft „Properties“ aufklappbar, und Sie können ihre Parameter konfigurieren.
Derzeit sind etwa zehn Editoren verfügbar, und deren Anzahl wächst stetig. Die Grid-Editoren sind auch als separate Komponenten verfügbar. Verwenden Sie keine Datentyp-Editoren, die nicht mit dem Typ Ihres Feldes kompatibel sind. Die Arbeit mit den Grid-Editoren wird in einem anderen Artikel ausführlich behandelt. An dieser Stelle sei angemerkt, dass der Editor für eine Grid-Spalte auch programmgesteuert über den Namen des Editors zugewiesen werden kann.
Wir haben nun eine kleine Anwendung erstellt, die eine Tabelle anzeigt – ohne eine einzige Zeile Code geschrieben zu haben! Versuchen wir nun, unserer Anwendung eine zusätzliche Funktionalität hinzuzufügen, z. B. die Auswahl einer anzuzeigenden Tabelle, das Drucken und den Export der Tabellendaten nach CSV.
Platzieren wir die folgenden Steuerelemente auf unserem Formular: eine frComboBox, 3 Buttons, eine frSpinEdit sowie die Komponenten TfrxReport, TfrGridReportBuilder und TfrxCSVExport. Die frComboBox verwenden wir zur Auswahl der anzuzeigenden Tabelle. Setzen Sie im Objektinspektor die Eigenschaft frCombobox1.Properties.DropDownStyle := frddsFixedList und schreiben Sie den folgenden Event-Handler für FormCreate:
procedure TForm1.FormCreate(Sender: TObject); var I:Integer; begin frCombobox1.Properties.Items.Clear; ADOConnection1.GetTableNames(frCombobox1.Properties.Items); I := frCombobox1.Properties.Items.IndexOf(ADOTable1.TableName); if I <> -1 then begin frCombobox1.ItemIndex := I; end; end;
Und den Event-Handler für OnClick von Button1:
procedure TForm1.Button1Click(Sender: TObject); begin ADOTable1.Active := False; ADOTable1.TableName := frCombobox1.Text; ADOTable1.Active := True; frGrid1TableView1.Columns.Clear; frGrid1TableView1.Columns.RetrieveMissingColumns; end;
Wenn wir nun unsere Anwendung starten, erscheinen in frComboBox1 alle Tabellen unserer Datenbank, wobei diejenige ausgewählt ist, die in unserer ADOTable angegeben ist. Wenn wir Button1 drücken, erscheint in der Grid der Inhalt der ausgewählten Tabelle. Versuchen wir, die Tabelle „biolife“ zu öffnen:
Das Grid hat automatisch die Feldtypen erkannt und kann sogar Bilder anzeigen, die in der Datenbank gespeichert sind. Die angezeigten Bilder sind jedoch klein. Schreiben wir den folgenden Handler für frSpinEdit1:
procedure TForm1.frSpinEdit1PropertiesChanged(Sender: TObject); begin frGrid1TableView1.OptionsView.RowHeight := frSpinEdit1.Value; end;
Nun können wir durch Eingabe eines Werts in frSpinEdit1 und Drücken der Eingabetaste die Zeilenhöhe des Grids festlegen. Versuchen wir, den Inhalt des Grids zu drucken. Konfigurieren Sie dazu die Eigenschaften der Komponente frGridReportBuilder1 wie folgt:
Report:=frxReport1; View:=frGridTableView1; Options.BuildReportActionType:=braShowReport Options.BuildReportActionType:=frxCVSExport1
Und schreiben wir die eine Zeile Code in den OnClick-Handler von Button2:
procedure TForm1.Button2Click(Sender: TObject); begin frGridReportBuilder1.Build; end;
Starten Sie die Anwendung, klicken Sie auf die Schaltfläche „Print“ (Button2) und erhalten Sie:
In diesem Beispiel haben wir das Grid nach dem Feld „Company“ sortiert und einige Spalten ausgeblendet. In der Vorschau erhalten wir genau die gleichen Daten wie im Grid.
Die Eigenschaft Options.BuildReportActionType der Komponente TfrGridReportBuilder bestimmt, was mit dem aktuellen Bericht nach seiner Erstellung geschehen soll. Es gibt drei Optionen:
Options.DefaultExport).Schreiben wir den folgenden Handler für Button3:
procedure TForm1.Button3Click(Sender: TObject); begin TfrGridTableViewReportBuilderOptions(frGridReportBuilder1.Options).BuildReportActionType := braExportReport; frGridReportBuilder1.Build; TfrGridTableViewReportBuilderOptions(frGridReportBuilder1.Options).BuildReportActionType := braShowReport; end;
Starten Sie unsere Anwendung und klicken Sie auf Button3 – zuerst erscheint der CSV-Exportdialog, dann der Dialog zum Speichern der resultierenden Datei. Wenn Sie die erhaltene Datei öffnen, stellen Sie fest, dass ihr Inhalt mit den im Grid angezeigten Daten übereinstimmt.
Mit wenigen Mausklicks und etwa zehn Zeilen Code haben wir somit ein recht nützliches Dienstprogramm erstellt, das den Export aus einer angebundenen Datenbank ermöglicht.
Dieses Beispiel funktioniert auch unter Lazarus, einschließlich Linux. Lediglich die Datenzugriffskomponenten sowie die Methoden zum Abrufen der Tabellenliste aus der angebundenen Datenbank und zur Aktivierung der ausgewählten Tabelle müssen ausgetauscht werden. Das Grid arbeitet mit beliebigen Nachfahren von TDataSet.
Sie können sich dieses Demobeispiel ansehen, ohne selbst Code in Ihrer IDE eingeben zu müssen. Es ist im FastGrid-Demo-Set unter dem Namen „DataAware“ enthalten.
Wie wir sehen, ist die Arbeit mit der Komponente TfrGrid einfach und unkompliziert. In diesem Artikel haben wir kurz die wichtigsten Einsatzmöglichkeiten dieser Komponente durchlaufen. In zukünftigen Artikeln werden wir gemeinsam verschiedene Aspekte der Grid-Nutzung detaillierter untersuchen. Wenn Sie an bestimmten Aspekten der Anwendung interessiert sind, teilen Sie uns dies bitte mit – wir werden versuchen, die gewünschten Details ausführlicher zu behandeln. Das kleine Projekt mit dem Grid, das wir in diesem Artikel erstellt haben, sollten Sie übrigens nicht weglegen – es wird uns noch nützlich sein!