Detailansichten unter einem Datensatz anzeigen
Lassen Sie den Benutzer einen Kunden im Raster aufklappen, um darunter seine Bestellungen und seine Notizen zu sehen, jeweils auf einer eigenen Registerkarte und ohne Unterformular.
Voraussetzungen: WKL Forms Object Library 1.23 oder höher.
Lösungsüberblick
Eine Detailansicht nennt eine Datenherkunft, deren Schlüssel und die Verknüpfung zwischen Detail- und
Hauptdatensatz (LinkChildFields, LinkMasterFields, wie bei einem Unterformular). AddDetailView fügt eine hinzu;
die Definitionen werden mit dem Formular in DetailViews gespeichert. Der Benutzer klappt einen Datensatz mit einem
Klick auf seinen Pfeil oder mit Strg und + auf; Code verwendet ExpandDetail, CollapseDetail und DetailGrid.
Umsetzung
With Me!Grid1.Object
.AddDetailView "Bestellungen", "tblBestellungen", "BestellNr", "KundeID", "KundeID", "Bestellungen", "Artikel;Menge"
.AddDetailView "Notizen", "tblNotizen", "NotizID", "KundeID", "KundeID", "Notizen"
.DetailHeight = 2400 ' twips, the same for every expanded record
End With
' Open the orders of customer 3 and read them:
Me!Grid1.Object.ExpandDetail 3, "Bestellungen"
Debug.Print Me!Grid1.Object.DetailGrid(3, "Bestellungen").RecordCount
Die Designerseite Detailansichten bearbeitet dieselbe Liste (hinzufügen, entfernen, Reihenfolge, Felder jeder Ansicht, Höhe).
Hinweise
- Jede Registerkarte ist ein eigenes Raster, das über dieselbe Access-Datenbank liest, im selben
DataMode, mit Schriftart, Farben undAllowEditingdes Hauptrasters. Seine Spalten sindColumnFieldsoder jedes Feld der Quelle außer den Verknüpfungsfeldern; ihre Breiten passen sich den angezeigten Datensätzen an. Eine Spaltenüberschrift ist der Feldname oder der Alias einer SQL-Quelle; die EigenschaftCaptioneines Tabellenfelds wird nicht gelesen. Verwenden Sie Aliasnamen für Überschriften in einer anderen Sprache als der der Feldnamen. - Eine Ansicht speichert keine Einstellungen je Spalte (Breite,
ReadOnly, Format, Nachschlageliste, Status). ÜberDetailGridgeänderte Spalten behalten die Änderung nur, solange der Datensatz aufgeklappt bleibt. Nehmen Sie solche Änderungen inDetailExpandvor, damit sie jedes Mal gelten. - Detailansichten haben eine Ebene: Eine Detailansicht kann keine eigenen Detailansichten haben.
- Mit
AllowAdditionsdes Hauptrasters hat eine Detailansicht ihre Zeile für neue Datensätze (NewItemRow). Ein dort hinzugefügter Datensatz erhält in seinen Verknüpfungsfeldern die Werte des Hauptdatensatzes, wie in einem Unterformular. Bearbeiten und Löschen folgenAllowEditingundAllowDeletionsdes Hauptrasters. - Die Ereignisse einer Detailansicht erreichen das Formularmodul nicht;
DetailGridgibt ihr Raster für Code zurück. Lehnt die Datenquelle eine Änderung ab, markiert die Detailansicht die Zeile und zeigt die Meldung selbst an. Das Objekt ist gültig, solange der Datensatz aufgeklappt bleibt. Requery, eine geänderte Bindung oder ein anderer Hauptdatensatz eines verknüpften Rasters schließen jeden aufgeklappten Datensatz, weil dessen Datensätze möglicherweise nicht mehr vorhanden sind.DetailExpandundDetailCollapsemelden die Änderungen des Benutzers und des Codes, nicht diese.- Eine Registerkarte, deren Datensätze sich nicht lesen lassen, zeigt statt eines Rasters den Grund an; das Hauptraster arbeitet weiter.
- Die Zeilen unter einem aufgeklappten Datensatz rücken nach unten; Bildlauf, Klicks und UI Automation berücksichtigen die Lücke. Die Datensätze eines Hauptrasters mit einer Million Datensätzen bleiben virtuell.