"Weiter"/"Zurück" Button erstellen
Hallo Zusammen,
normalerweise kan bei Ninox in den Tabellen ja ganz einfach per Pfeiltasten (Laptop) navigiert werden. Auch in der IPad-Version ist dies durch Wischen oder drücken auf die Ninox-Pfeiltasten möglich. Soweit, so gut. Nun nutze ich aber die Option openFullscreen() um meine Anschicht zu maximieren. In dieser Fullscreen-Ansicht gibt es auf dem iPad nun keine Schaltfläche mehr mit Pfeiltasten (sonst ja neben Drucker, Papierkorb, Duplizieren und Neuer datensatz zu finden). Hier möchte ich gerne eine Pfeiltaste machen, sodass ich auch aus Ansichten zum nächsten Datensatz navigieren kann.
Ich habe also einen verknüpften Datensatz in meinem Dashboard (in einer Ansicht per popupRecord() geöffnet - Ansicht läuft übergens direkt auf den mit dem Dashboard verknüpften Datensatz, ohne select). Wie kann ich nun per "Weiter"-Button zum nächsten Datensatz kommen? Ich habe schon einiges versucht, komme nur nicht wirklich zu einem Ansatz. Es soll zum nächsten Datensatz in Alphabetischer Reihenfolge des Namens gegangen werden und am Ende der Liste natürlich auch wieder zum 1. Eintrag (ein zweiter Button soll natürlich auch wieder zurück navigieren können ;)).
Habt ihr einen Lösungsansatz? Es gab mal ein Beispiel in einer Webinar-Datenbank, die finde ich nur einfach nicht mehr - trotz 45-Minuten-Suche.
Über die Nr kann ich ja nicht gehe, sonst hätte ich so etwas wie first(Datensatz.Nr>me.Nr)
gesagt. Mein Kopf ist Watte. Ich brauche mal eure frische Kreativität ;)
Danke!!!
6 Antworten
-
Hallo Stephan, schau Dir in der 0001 Referenzdatenbank, Praxisbeispiele Examples Nr. 15 und 16 an.
15 Code für Button zum nächsten Datensatz16 Code für Button vorheriger Datensatz
Wolfgang
-
Für nächsten Datensatz :
---
let myFlag := false;
let myN := TABELLENSPALTE;
let myArr := for i in (select TABELLE) order by TABELLENSPALTE do
if not myFlag and i.TABELLENSPALTE != myN then
void
else
if i.TABELLENSPALTE = myN then myFlag := true else i end
end
end;
openRecord(first(myArr))
---für vorherigen Datensatz:
---
let myFlag := false;
let myN := TABELLENSPALTE;
let myArr := for i in (select TABELLE) order by TABELLENSPALTE do
if not myFlag and i.TABELLENSPALTE != myN then
i
else
if i.TABELLENSPALTE = myN then myFlag := true end
end
end;
openRecord(last(myArr))
---Gruss Wolfgang
-
Oder vielleicht einfach so (Sortierfeld = 'Name')?
Datensatz vor:
let myN := Name;
let myR := first((select Tabelle where Name > myN) order by Name);
if myR = null then
myR := first((select Tabelle) order by Name)
end;
openRecord(myR)
Datensatz zurück:
let myN := Name;
let myR := last((select Tabelle where Name < myN) order by Name);
if myR = null then
myR := last((select Tabelle) order by Name)
end;
openRecord(myR)
-
Danke euch beiden! @Wolfgang: Genau die hatte ich gesucht! @Copytexter: Einfache Lösung, allerdings gib es ein Problem: Wenn die Personen den gleichen Nachnamen haben, dann klappt es leider nicht und es wird natürlich der zweite Eintrag des gleichen Nachnamens übersprungen. Es sei denn, ich baue mir in der ausgewählten Tabelle mit dem Namen ein eindeutiges Feld (z.B. Nachname+", "+Vorname+", "+Geburtsdatum) auf das ich mich beziehe - ich glaube dann wird es eindeutig.
Danke euch auf jeden Fall!!!
Liebe Grüße
-
Ja, das Sortierfeld sollte eindeutig sein. Man kann das aber auch direkt im Skript machen:
let myT := Name + Vorname;
let myR := first((select TabelleA where Name + Vorname > myT) order by Name + Vorname);
if myR = null then
myR := first((select TabelleA) order by Name + Vorname)
end;
openRecord(myR)
Aber letztlich ist es natürlich egal. Hauptsache, es funktioniert. ;)
-
Stimmt, so spart man sich das zusätzliche Feld in der übergeordneten Tabelle. Guter Punkt! Danke Dir!!!
Content aside
- vor 3 JahrenZuletzt aktiv
- 6Antworten
- 926Ansichten