Ein DBGrid ermöglicht das Editieren einer Relation in Tabellenform. Es werden nur MemRelationen (siehe dazu OpenRel(), ADBOpenRel() und SearchAll()) unterstützt.
Die Tupel werden zeilenweise dargestellt. Jede Zeile wird entsprechend der Tupelstruktur in Felder unterteilt. Dadurch ergibt sich eine Tabellenform. Der Benutzer kann die Felder mit dem Cursor anwählen und direkt editieren.
Wenn mittels CreateIndex() eine Sortierreihenfolge auf der Relation festgelegt ist, werden die Tupel entsprechend sortiert angezeigt. Alle Tupel der Relation werden verarbeitet. Falls die Menge eingeschränkt werden soll, muss dies vorher geschehen (z.B. mit DBFilter()).
Mit dispfelder kann eine Auswahl der darzustellenden Felder (also Spalten)
ausgewählt werden. Die Felder können editierbar oder zum Editieren
gesperrt werden. Das Format des dispfelder-
Die Größe der Tabelle wird mit breite (Breite in Pixeln) und zeilen
(Anzahl der gleichzeitig darzustellenden Tupel) festgelegt. Ist breite<0,
dann wird das DBGrid automatisch an die Breite des AGWindows angepasst (und
breite auf die Breite addiert, also diese vermindert).
Ein vertikaler und/oder horizontaler Scroll-
Ist retflag FALSE, wird bei Beenden einer Eingabe mit Return der
updatefieldhandler aufgerufen und der Cursor nicht verändert. Der
Parameter des Handlers Bool name
Die Parameter dispfeld1 bis dispfeldn enthalten eine Liste von
Display-
Das Displayfeld ist der Name eines Feldes der Relation (z.B. Ort).
In der betreffenden Spalte werden dann pro Zeile die Inhalte dieses Feldes
dargestellt.
Parameter
Manchmal sind die Inhalte eines Feldes Codes, die nicht direkt dargestellt
werden, sondern mittels einer Code-
feldname ist der Name des Code-
Eine Combobox bietet die Vorteile einer Liste mit festen Vorschlägen,
ohne aber auf diese eingeschränkt zu sein, da man im Eingabefeld auch jeden
beliebigen Text eingeben kann.
Felder, die mittels einer Combobox editiert werden, können entweder per
Texteingabe (mit optionaler automatischer Vervollständigung für vorhandene
Listeneinträge), mit Pfeiltasten
oder mit Mausklick auf den ensprechenden Listeneintrag gesetzt werden.
Mit den Pfeiltasten kann man zwischen den einzelnen Listeneinträgen wechseln,
bei aufgeklappter Liste ist es möglich, einen Listeneintrag per Maus
anzuklicken. Per Tastatur können auch neue beliebige Texte eingegeben werden,
die nicht Teil der Liste sind. Der neue Text wird für das aktuelle Feld
übernommen, jedoch wird dieser nicht in der Auswahlliste gespeichert. Die
Auswahlliste kann vom Benutzer nicht verändert werden.
Folgt dem Displayfeld direkt ein
Die Breite der Tabelle ergibt sich aus der Summe aller Spaltenbreiten.
Ein vorangestelltes - vor den Displayfeldern bewirkt,
dass diese nicht editiert werden können. Beispiel:
Durch Mausklick oder durch die Cursortasten Pfeilhoch bzw. Pfeilrunter kann
der Benutzer ein anderes Tupel anwählen. Das Quadrat in der ersten Spalte
des aktuellen Tupels wird rot eingefärbt.
Die Azurfunktion selecthandler wird aufgerufen. Für das angewählte Feld,
auch wenn sich die Spalte nicht
geändert hat, wird die Azurfunktion selectfieldhandler aufgerufen. Das Feld
wird grau bzw. dunkelgrün dargestellt (Cursor).
Wird ein Feld im selben Tupel angewählt, wird nur der selectfieldhandler
aufgerufen.
Hat der Benutzer das Editieren eines Feldes abgeschlossen, so wird in der Regel der
updatefieldhandler aufgerufen. Wenn der Benutzer dadurch das Editieren des Tupels
abschließt (durch Wahl eines anderen oder durch Drücken der Returntaste oder von Esc),
wird stattdessen der updatehandler aufgerufen, sofern dieser gesetzt ist. Der
Handler-
Falls ein Feld zum Editieren gesperrt ist (also grün ist), wird der
updatefieldhandler aufgerufen, wenn der Benutzer auf dem Feld einen
Doppelklick ausgelöst hat.
Den Handler-
Wenn das Editieren mit der Anwahl eines anderen Tupels beendet wurde
(durch Pfeiltaste oder Mausklick), wird zuerst der Update-
Ein Bool-
Möchte man die Reihenfolge auf Ungesetzt , Nein, Ja,
Ungesetzt ändern, so fügt man vor dem Displayfeld ein
Es können ganze Zeilen oder ganze Spalten zum Editieren gesperrt werden.
Spalten sperrt man, indem man bei der Angabe der Displayfelder dem
Feldnamen des Feldes ein Minus voranstellt. Beispiel: -
Zeilen, also Tupel, sperrt man, indem die Tupel um ein Bool-
Felder, die einen ungewissen Inhalt haben (siehe SetUntrusted()), werden mit roter Schrift dargestellt. Sie können editiert werden, falls ein Feld nicht zuätzlich grün ist.
Wenn der Benutzer mit der rechten Maustaste in das Quadrat links neben
ein Tupel klickt, wird das Tupel selektiert. Dies wird angezeigt, indem
ein blaues Quadrat dargestellt wird. Durch abermaliges Klicken wird das
Tupel wieder deselektiert und die blaue Selektierung wieder entfernt.
Die selektierten Tupel können mit den Funktionen CollectAll() und
TupIsSelected() abgefragt werden.
Beim Aufbau des Grids und beim
Wurde ein Tupel blau selektiert und danach mit gedrückter Shift-
Wenn der Benutzer mit der rechten Maustaste auf eine Spaltenüberschrift klickt, wird diese markiert (siehe MarkierteFelder()) und in Fettschrift dargestellt. Ein erneuter Klick wechselt wieder zurück. Um darüber informiert zu werden, ob eine Spalte de/markiert wurde, kann ein Handler durch SetHandle (Name,"HeaderMarked=Methode") angemeldet werden. Durch den Bool Name_Marked kann in der Handlerfunktion abgefragt werden, ob die Spalte markiert oder demarkiert wurde.
Änderungen, die der Benutzer in dem DBGrid vornimmt, werden sofort in die Relation übernommen. Änderungen an der Relation, die von Azur aus erfolgen, müssen dem DBGrid jedoch mitgeteilt werden. Dazu wird die Funktion ExportVar() benutzt (das DBGrid heißt in den Beispielen immer Auswahl):
Wenn die azurseitige Änderung eines Tupels sich sofort auf der Oberfläche
niederschlagen soll, muss ein
Um neue Tupel im DBGrid aufzunehmen, werden sie mit AppTupel()
in die Relation aufgenommen. Danach wird mit
Soll das aktuelle Tupel gelöscht werden, so geschieht dies in zwei
Schritten: das Tupel wird durch Azur aus der Relation gelöscht
(DelTupel()). Darauf wird dem DBGrid ein
Mit
Mit
Mit
Die Position des Cursors kann auch relativ verändert werden mit...
Bewegt den Cursor ein Feld nach links
Bewegt den Cursor ein Feld nach rechts
Bewegt den Cursor eine Zeile nach oben
Bewegt den Cursor eine Zeile nach unten
Bewegt den Cursor x Felder nach rechts und y Zeilen nach unten
(bei negativen Werten entsprechend in die andere Richtung)
Bewegt den Cursor in die erste Zeile
Bewegt den Cursor in die letzte Zeile
wird vorher in das Feld übernommen. Beendet der Benutzer das Editieren mit der ESC- bleibt der Inhalt der Komponente erhalten.
in die Komponente des Tupels übernommen.
nicht verändert. Wenn der Benutzer eine Eingabe abschließt, der Updatefield- als unpassend bewertet und ein seine Eingabe werde zurückgewiesen. Beendet der Benutzer dieses Editieren mit der ESC- wird der Inhalt des Feldes (und der Komponente des Tupels) restauriert, der vor dem
Editiervorgang, der vor dem Das DBGrid prüft selbstständig, ob Schlüssel- Schlüssel eines Tupels eindeutig ist. Ist dies nicht der Fall, wird das
Beenden der Eingabe nicht erlaubt und der Benutzer über den Grund in
der Statuszeile informiert.