Berichtsansicht im Unterformular

In den Artikeln Berichtsansicht und Aufgabenplaner haben wir uns mit der Berichtsansicht beschäftigt. Diese wird umso interessanter, da man sie über ein Unterformular-Steuerelement in einem Formular integrieren kann. Dies schauen wir uns in diesem Artikel genauer an. Wir bauen dabei die Lösung aus dem Artikel Aufgabenplaner weiter aus, indem wir den dort vorgestellten Bericht als Unterformular in ein Formular einbetten, mit dem wir weitere Funktionen zur Lösung hinzufügen.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1801_BerichtsansichtImUnterformular.accdb.

Berichte im Unterformular

In Access-Versionen älter als Access 2010 war es nicht möglich, Berichte im Unterformular anzuzeigen. Dies gelingt nun jedoch recht einfach – und zwar genau wie das Hinzufügen eines Unterformulars zu einem Formular.

In diesem Fall wollen wir direkt auf der Lösung aus dem Artikel Aufgabenplaner aufsetzen, in dem wir eine kleine Lösung basierend auf einem Bericht als Benutzeroberfläche gebaut haben. Diesen Bericht wollen wir nun in einem Unterformular zu einem Formular namens frmAufgabenplaner hinzufügen.

Dieses Formular bereiten wir vorher kurz vor: Da es nicht an eine Datenquelle gebunden sein soll und somit auch keine Daten anzeigt, stellen wir die Eigenschaften Bildlaufleisten, Navigationsschaltflächen, Datensatzmarkierer und Trennlinien auf Nein und die Eigenschaft Automatisch zentrieren auf Ja ein. Danach ziehen wir einfach den Bericht rptAufgabenplaner aus dem Navigationsbereich in den Entwurf des Formulars hinein.

Das Ergebnis sieht etwa wie in Bild 1 aus. Was ist hier geschehen Access hat beim Fallenlassen des Berichts rptAufgabenplaner automatisch ein Unterformular-Steuerelement zum Formular hinzufügt und für die Eigenschaft Herkunftsobjekt dieses Steuerelements den Wert Bericht.rptAufgabenplaner eingestellt. Dadurch zeigt das Unterformular nun den Entwurf des Berichts rptAufgabenplaner an.

Hinzufügen eines Berichts zu einem Formular als Unterformular

Bild 1: Hinzufügen eines Berichts zu einem Formular als Unterformular

Kleine Korrekturen

Wie Sie sehen, zeigt dieses oben im Seitenkopfbereich die überschrift Aufgabenplaner an, die wir in diesem Kontext nicht benötigen. Außerdem bietet der Seitenkopfbereich noch die Schaltfläche cmdNeu zum Hinzufügen neuer Aufgaben zur Tabelle tblAufgaben. Wir wollen den Seitenkopf-Bereich nun komplett aus dem Bericht entfernen. Die überschrift können wir ersatzlos löschen, die Schaltfläche fügen wir dem Hauptformular hinzu. Außerdem wollen wir, dass sich die Höhe des Unterberichts automatisch an die Höhe des Formulars anpasst, wozu wir die Eigenschaft Vertikaler Anker des Unterformular-Steuerelements auf den Wert Beide einstellen. Eine Anpassung des horizontalen Ankers ist in diesem Fall nicht nötig, da die Steuer-elemente im Bericht selbst nicht angepasst werden können – es gibt im Bericht schlicht keine passenden Eigenschaften. In der Entwurfsansicht sieht das Formular nun wie in Bild 2 aus.

Ausgerichteter Unterbericht

Bild 2: Ausgerichteter Unterbericht

Den Code der Schaltfläche cmdNeu müssen wir etwas anpassen, da wir nach dem Anlegen der neuen Aufgabe ja nicht mehr das Objekt aktualisieren wollen, in dem die Prozedur ausgeführt wird, sondern den im Unterformular-Steuerelement befindlichen Bericht. Dies sieht dann wie folgt aus:

Private Sub cmdNeu_Click()
    DoCmd.OpenForm "frmAufgabe", WindowMode:=acDialog,                                       DataMode:=acFormAdd
    Me!rptAufgabenplaner.Report.Requery
End Sub

Die Requery-Methode wird also für das Report-Objekt im Unterformular-Steuerelement rptAufgabenplaner ausgelöst. Das das Unterformular-Steuerelement mit rptAufgabenplaner benannt wurde, liegt schlicht daran, dass die Unterformular-Steuerelemente für Objekte, die aus dem Navigationsbereich in ein Formular gezogen werden, automatisch den Namen des gezogenen Objekts erhalten.

Interessanterweise gibt es aber für im Unterformular-Steuerelement befindliche Berichte eine eigene Eigenschaft zum Referenzieren, nämlich Report.

Aus optischen Gründen haben wir auch noch die Eigenschaft Rahmenart des Unterformular-Steuerelements auf Transparent eingestellt, sodass das Formular in der Formularansicht wie in Bild 3 aussieht.

Der neu gestaltete Bericht im Hauptformular mit Neu-Schaltfläche

Bild 3: Der neu gestaltete Bericht im Hauptformular mit Neu-Schaltfläche

Benutzerdefinierter Filter

Warum nun den Bericht in der Berichtsansicht im Hauptformular unterbringen Ganz einfach: Weil wir benutzerdefinierte Filter festlegen wollen, mit den wir beispielsweise nach der Bezeichnung der Aufgabe, der Katgorie oder dem Datum filtern können. Das gelingt zwar auch schon über die Benutzeroberfläche mit Bordmitteln, aber diese sind nicht direkt erreichbar. Wenn wir wissen, wonach der Benutzer filtern will, können wir die notwendigen Steuer-elemente auch direkt sichtbar im Formular anlegen.

Beginnen wir mit einem Filter, der die im Bericht im Unterformular befindlichen Aufgaben nach der Bezeichnung der Aufgabe filtert. Dazu fügen wir dem Hauptformular ein Textfeld namens txtFilter hinzu sowie eine Schaltfläche namens cmdFiltern, mit der wir den Filter anwenden können. Außerdem fügen wir noch eine Schaltfläche hinzu, mir der wir den angewendeten Filter wieder aufheben können. Der Entwurf des Formulars sieht dann wie in Bild 4 aus.

Steuer-elemente zum Filtern und zum Aufheben des Filters

Bild 4: Steuer-elemente zum Filtern und zum Aufheben des Filters

Um den Filter anzuwenden, fügen die der Schaltfläche cmdFiltern die folgende Prozedur hinzu:

Private Sub cmdFiltern_Click()
    Dim strFilter As String
    strFilter =                "Bezeichnung LIKE '" & Me!txtFilter & "'"
    With Me!rptAufgabenplaner.Report
        .Filter = strFilter
        .FilterOn = True
    End With
End Sub

Diese ermittelt den Inhalt des Textfeldes txtFilter und stellt eine Bedingung zusammen, die beispielsweise Bezeichnung LIKE ‘Artikel*’ lautet. Dieser wird dann an die Eigenschaft Filter des Berichts im Unterformular übergeben. Außerdem stellen wir die Eigenschaft FilterOn des gleichen Elements auf True ein. Damit werden nun nur noch die der Bedingung entsprechenden Elemente im Bericht im Unterformular angezeigt (siehe Bild 5).

Filtern nach der Bezeichnung einer Aufgabe

Bild 5: Filtern nach der Bezeichnung einer Aufgabe

Praktischerweise bleiben nun auch die Datumsangaben und die Kategorien erhalten.

Um den Filtern wieder aufzuheben, fügen wir eine weitere Schaltfläche namens cmdKeinFilter hinzu. Diese löst die folgende Prozedur aus:

Private Sub cmdKeinFilter_Click()
    Me!txtFilter = ""
    With Me!rptAufgabenplaner.Report
        .Filter = ""
        .Requery
    End With
End Sub

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar