Hinzufügen der Funktion "Gruppenfilter-Steuerelement" zu zwei oder mehr Dropdownlistenfeldern
Ein Gruppenfilter-Steuerelement wird verwendet, um Datensätze abzurufen, die den im Steuerelement ausgewählten Wert enthalten. Allerdings unterstützt eine Datenzugriffsseite nur ein Gruppenfilter-Steuerelement für jede Gruppierungsebene. Wenn Sie auf Werten basierende Datensätze filtern möchten, die in mehreren Listenfeldern ausgewählt wurden, kann dies programmgesteuert erfolgen.
Die folgende Abbildung zeigt eine Datenzugriffsseite mit zwei Dropdownlistenfeldern, die wie Gruppenfilter-Steuerelemente agieren. Die Daten werden erst dann auf der Seite angezeigt, wenn Sie einen Wert in jedem Listenfeld ausgewählt haben.
Wenn Sie beispielsweise Berge, Karin im ersten Listenfeld und Brasilien im zweiten Listenfeld wählen, ruft die Seite alle Aufträge ab, die von Frau Berge nach Brasilien versandt wurden.
Hinzufügen von mehreren Gruppenfilter-Steuerelementen zu einer Seite
- Erstellen Sie eine Datenzugriffsseite mit den gewünschten Feldern und Gruppierungsebenen.
- Fügen Sie die Filterfelder unbedingt als Dropdownlistenfelder in den Kopfzeilenabschnitt ein.
Auf der vorstehenden Seite werden die Listenfelder mit den Namen cboEmployee und cboShipCountry bezeichnet.
- Legen Sie die Eigenschaften ListRowSource, ListBoundField und ListDisplayField für jedes der Listenfelder fest.
Legen Sie beispielsweise für das Listenfeld ShipCountry die Option ListRowSource auf Recordset: Orders fest, die Option ListBoundField auf ShipCountry und ListDisplayField auf ShipCountry.
- Klicken Sie auf die Leiste im Headerbereich der äußersten Gruppierungsebene, und klicken Sie dann auf Beschriftung.
- Deaktivieren Sie die ControlSource-Eigenschaft der Gruppenfilter-Steuerelemente, und verschieben Sie die Listenfelder dann in den Beschriftungsabschnitt.
- Um zu verhindern, dass die äußerste Gruppierungsebene Datensätze abruft, bevor die Auswahl getroffen wurde, legen Sie im Fenster Datengliederung die ServerFilter-Eigenschaft des äußersten RecordsetDef-Objekts auf einen Ausdruck fest, der False zurückgibt.
Wählen Sie beispielsweise den Eintrag Orders RecordsetDef in der Datengliederung, und geben Sie dann 1=0 in das ServerFilter-Eigenschaftsfeld ein.
-
Entfernen Sie den Datensatznavigationsbereich für die Gruppierungsebene, die die Gruppenfilter-Steuerelemente enthält.
- Fügen Sie im DataPageComplete-Ereignis Code hinzu, um den ausgewählten Text in den Listenfeldern zu entfernen und alle anderen Abschnitte der Seite auszublenden.
Weitere Informationen darüber, wie den Steuerelementen auf einer Seite Code hinzugefügt wird, finden Sie in der Hilfe zu Microsoft Access.
Beispiel für die DataPageComplete-Ereignisprozedur.
<SCRIPT language=vbscript event=DataPageComplete(dscei) for=MSODSC> <!-- ' fInited wird verwendet, um sicherzustellen, dass dieser Code nur ausgeführt wird, wenn die Seite das erste Mal geladen wird. If (fInited = FALSE And dscei.DataPage.GroupLevel.RecordSource = "Orders") Then fInited = TRUE
' Diese Listenfelder sollen zu Beginn leer sein. cboEmployee.value = "" cboShipCountry.value = ""
' 'Rückgängig machen' verwenden, um den anfänglichen Bereich auszublenden, wenn die Seite geladen wird. MSODSC.Datapages(0).Undo End If --> </SCRIPT>
- Rufen Sie im OnChange-Ereignis der Listenfelder die OnFilterComboChange-Unterprozedur auf, mit der das Recordset basierend auf den in den Listenfeldern ausgewählten Werten gefiltert wird.
Beispielsweise sieht das OnChange-Ereignis für das Listenfeld cboEmployee folgendermaßen aus:
<SCRIPT language=vbscript event=OnChange for=cboEmployee> <!-- OnFilterComboChange()
--> </SCRIPT>
- Initialisieren Sie in einem separaten globalen Skriptblock die Variable, die sicherstellt, dass der Code im DataPageComplete-Ereignis nur einmal ausgeführt wird, und definieren Sie dann die OnFilterComboChange-Unterprozedur.
Beispiel für einen Skriptblock, der die "fInited"-Variable initialisiert und die "OnFilterComboChange"-Unterprozedur definiert
<SCRIPT language=vbscript>
Dim fInited
fInited=FALSE
Sub OnFilterComboChange() Dim stWhere ' Nichts tun, bis der Benutzer einen Wert aus dem Listenfeld auswählt. If (cboEmployee.value <> "" And cboShipCountry.value <> "") Then stWhere = "EmployeeID=" & cboEmployee.value & " " stWhere = stWhere & "AND ShipCountry='" & cboShipCountry.value & "' "
' Serverfilter für das Orders-Recordset festlegen. MSODSC.RecordsetDefs.Item("Orders").ServerFilter = stWhere End If End Sub
Hinzufügen einer Schaltfläche "Suchen" zu einer Datenzugriffsseite
Wenn eine Seite in der Seitenansicht geöffnet ist, können Sie nach Datensätzen filtern, die den ausgewählten Werten entsprechen, indem Sie auf der Symbolleiste Datensatznavigation auf die Schaltfläche Auswahlbasierter Filter klicken. Allerdings enthält die Symbolleiste keine Schaltfläche Suchen, die es Ihnen ermöglicht, das Recordset nach bestimmten Datensätzen zu durchsuchen. Sie können eine eigene Schaltfläche Suchen erstellen, indem Sie der Seite eine Befehlsschaltfläche hinzufügen und dem OnClick-Ereignis der Schaltfläche eine Ereignisprozedur zuordnen.
Die folgende Abbildung zeigt die Datenzugriffsseite Artikel mit der Schaltfläche Artikel suchen.
Wenn Sie auf die Schaltfläche Artikel suchen klicken, zeigt die Seite das Dialogfeld Suchen an. Mit dem Dialogfeld werden Sie aufgefordert, die ID des Artikeldatensatzes einzugeben, den Sie anzeigen möchten. Wenn Sie auf OK klicken, wird der entsprechende Datensatz angezeigt, sofern er im Recordset gefunden werden kann. Andernfalls zeigt die Seite eine Fehlermeldung an.
Hinzufügen einer Schaltfläche "Suchen" zu einer Seite
- Öffnen Sie eine Datenzugriffsseite in der Entwurfsansicht.
- Vergewissern Sie sich, dass das Tool Steuerelement-Assistent
in der Toolbox nicht aktiviert ist. Hiermit wird der Assistent ausgeschaltet.
- Klicken Sie in der Toolbox auf das Tool Befehlsschaltfläche
.
- Klicken Sie auf der Datenzugriffsseite auf die Befehlsschaltfläche in dem Kopfzeilenabschnitt, der dem Recordset entspricht, das Sie durchsuchen möchten.
- Legen Sie die Eigenschaften der Befehlsschaltfläche fest, um ihr das gewünschte Aussehen zu verleihen.
- Fügen Sie im OnClick-Ereignis der Schaltfläche Suchen Code hinzu, um das Recordset zu klonen, um den Benutzer zur Eingabe aufzufordern, um Eingaben seitens des Benutzers zu akzeptieren und um das geklonte Recordset nach dem entsprechenden Datensatz zu durchsuchen.
Weitere Informationen darüber, wie den Steuerelementen auf einer Seite Code hinzugefügt wird, finden Sie in der Hilfe zu Microsoft Access.
Beispiel für die OnClick-Ereignisprozedur der Schaltfläche "Suchen"
<SCRIPT language=vbscript event=onclick for=btnFind> <!--
' Recordset erstellen.
Dim rs Set rs = MSODSC.DataPages(0).Recordset.Clone On error resume next
' In dieser Zeile wird davon ausgegangen, dass der gefilterte Wert eine Ganzzahl ist. ' Wenn der Suchwert eine Zeichenfolge ist, eine andere Syntax verwenden. ' Beispielsweise "CustomerID = '" & CStr(InputBox("Gewünschten Kunden eingeben", "Suchen")) & "'" rs.find "ProductID=" & cLng(inputbox("ProductID eingeben","Suchen")) ' Benutzerdefinierte Fehlerbehebung. If (err.number <> 0) Then Msgbox "Error: " & err.number & " " & err.description,,"Ungültige Suche" Exit Sub End If ' Überprüfen, ob Suchergebnisse erfolgreich sind. If (rs.bof) or (rs.eof) Then Msgbox "No Product found",,"Suche beendet" Exit Sub End If MSODSC.DataPages(0).Recordset.Bookmark = rs.Bookmark --> </SCRIPT>
Anmerkung Wenn Sie VBScript-Blöcke (Visual Basic Scripting Edition) für MSODSC-Ereignisse (Microsoft Office Data Source Control) erstellen, müssen Sie dem Ereignisnamen wie folgt einen Parameter hinzufügen:
<SCRIPT LANGUAGE=vbscript FOR=MSODSC EVENT=Current(oEventInfo)>
Der oEventInfo-Parameter wird verwendet, um spezifische Informationen über das Ereignis an das Skript zurückzugeben. Sie müssen diesen Parameter ungeachtet der Tatsache hinzufügen, ob er verwendet werden soll, denn ohne den Parameter funktioniert das Skript nicht.