dcbrowse aktualisierung
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 153
- Registriert: Do, 06. Apr 2006 10:51
- Danksagung erhalten: 3 Mal
dcbrowse aktualisierung
Hallo,
ich habe eine dcbrowse das mit dcsetcope eingegrenzt ist.
Es wird nun z.B. 1 Datensatz angezeigt. Über eine Button-Funktion "Neu" wird ein neuer zusätzlicher Datensatz erstellt.
Vor dem zurück auf den Browser-Focus wird noch ein browser:refreshall ausgeführt.
Nachdem der Browser wieder den Focus hat ist der erste Datensatz verschwunden und nur noch der neue Datensatz in der
anzeige.
Durch navigieren des Browser über die Pfeiltaste nach oben kann ich wieder den verschwundenen Datensatz mit zur
anzeige bringen.
Wie kann ich es erreichen, daß die Browse anzeige nicht nach oben wegscrollt
und gleich wieder alle Datensätze anzeigt ?
Ideal wäre natürlich wenn ich einstellen könnte ab welchem Datensatz die Anzeige ausgegeben werden soll.
Hat jemand eine Idee ?
Gruß Peter
ich habe eine dcbrowse das mit dcsetcope eingegrenzt ist.
Es wird nun z.B. 1 Datensatz angezeigt. Über eine Button-Funktion "Neu" wird ein neuer zusätzlicher Datensatz erstellt.
Vor dem zurück auf den Browser-Focus wird noch ein browser:refreshall ausgeführt.
Nachdem der Browser wieder den Focus hat ist der erste Datensatz verschwunden und nur noch der neue Datensatz in der
anzeige.
Durch navigieren des Browser über die Pfeiltaste nach oben kann ich wieder den verschwundenen Datensatz mit zur
anzeige bringen.
Wie kann ich es erreichen, daß die Browse anzeige nicht nach oben wegscrollt
und gleich wieder alle Datensätze anzeigt ?
Ideal wäre natürlich wenn ich einstellen könnte ab welchem Datensatz die Anzeige ausgegeben werden soll.
Hat jemand eine Idee ?
Gruß Peter
Gruss Peter
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2945
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: dcbrowse aktualisierung
Setze vor dem oBrowse:RefreshAll() ein DC_DbGoTop() - nicht DbGoTop(), das berücksichtigt den gesetzten Scope nicht.
Wenn du die RecNo() des neuen Satzes hast, setze nach dem Refresh ein DbGoTo(SatzNr) - nur wenn der neue Satz die Scope-Bedingung erfüllt.
Wenn du die RecNo() des neuen Satzes hast, setze nach dem Refresh ein DbGoTo(SatzNr) - nur wenn der neue Satz die Scope-Bedingung erfüllt.
Viele Grüße
Wolfgang
Wolfgang
-
- Rekursionen-Architekt
- Beiträge: 153
- Registriert: Do, 06. Apr 2006 10:51
- Danksagung erhalten: 3 Mal
Re: dcbrowse aktualisierung
Danke Wolfgang für Deine Antwort,
habs ausprobiert und es funktioniert fast !
Mein Code sieht nun so aus:
Die Browse-Anzeige sieht nach ausführen des Action-Codeblocks so aus, daß
der 1.ste Datensatz verdoppelt angezeigt wird und dann noch der neue (also 3 Zeilen angezeigt werden).
Mit der Pfeiltaste rauf/runter kann aber auf den nun angezeigten 3.ten Eintrag, der
den neuen Datensatz zeigt, nicht positioniert werden.
Erst durch das Verlassen den Browsers und erneutem aufrufen ist es wieder so wie gewünscht.
Was mache ich jetzt wieder falsch ??
Peter
habs ausprobiert und es funktioniert fast !
Mein Code sieht nun so aus:
Code: Alles auswählen
@ 1,2 DCPUSHBUTTON CAPTION '~Neu' ;
TABSTOP SIZE 9,1;
ACTION {|| machneuSatz(),;
nNeu := Recno(),;
DC_DbGoTop(),;
oBrowse:RefreshAll(),;
DbGoTo(nNeu),;
oBrowse:show(),;
SetAppFocus(oBrowse)}
der 1.ste Datensatz verdoppelt angezeigt wird und dann noch der neue (also 3 Zeilen angezeigt werden).
Mit der Pfeiltaste rauf/runter kann aber auf den nun angezeigten 3.ten Eintrag, der
den neuen Datensatz zeigt, nicht positioniert werden.
Erst durch das Verlassen den Browsers und erneutem aufrufen ist es wieder so wie gewünscht.
Was mache ich jetzt wieder falsch ??
Peter
Gruss Peter
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2945
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: dcbrowse aktualisierung
Lass mal DbGoTo(nNeu) weg, dann sollte es erst mal richtig angezeigt werden.
Um dann den Cursor auf den neuen Datensatz zu setzen, muss man. m.E. danach mit oBrowse:Down() arbeiten (vorher ermitteln wie oft).
Aber vielleicht weiß noch jemand eine bessere Lösung.
Um dann den Cursor auf den neuen Datensatz zu setzen, muss man. m.E. danach mit oBrowse:Down() arbeiten (vorher ermitteln wie oft).
Aber vielleicht weiß noch jemand eine bessere Lösung.
Viele Grüße
Wolfgang
Wolfgang
-
- Rekursionen-Architekt
- Beiträge: 153
- Registriert: Do, 06. Apr 2006 10:51
- Danksagung erhalten: 3 Mal
Re: dcbrowse aktualisierung
Danke Wolfgang,
nach weglassen des DbGoTo(nNeu) funktioniert es zumindest wieder.
Über die Anzeigesteuerung muß ich nochmals brüten.
Gruß Peter
nach weglassen des DbGoTo(nNeu) funktioniert es zumindest wieder.
Über die Anzeigesteuerung muß ich nochmals brüten.
Gruß Peter
Gruss Peter
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: dcbrowse aktualisierung
DbGotop() berücksichtigt Scopes nicht? Das wäre mir neu. Und es wäre eine Katastrophe, weil das essentiell ist. Die aber nicht eintritt, weil es schlicht nicht stimmt: "DbGoTop() - Positions the record pointer to the first matching record." (aus der Doku)
Herzlich,
Tom
Tom
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2945
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: dcbrowse aktualisierung
Danke Tom für die Klarstellung. Habe das seit ewigen Zeiten im Kopf, da ich aus diesem Grund irgenwann mal vor Urzeiten auf DC_DbGoTop() umgestellt habe.
Dann muss ich mir mal bei Gelegenheit den Unterschied zwischen DbGoTop() und DC_DbGoTop() ansehen.
Dann muss ich mir mal bei Gelegenheit den Unterschied zwischen DbGoTop() und DC_DbGoTop() ansehen.
Viele Grüße
Wolfgang
Wolfgang
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: dcbrowse aktualisierung
DC_DbGotop() ist vor allem dann dringend zu verwenden, wenn man DC_SetScopeArray()* gearbeitet wird. Außerdem unterstützt es ADS- und SQLexpress-Cursor. Im Normalbetrieb ist es unnötig. Da löst es auch (über eine Wrapper-Funktion) DbGoTop() aus. Deine Erinnerung muss schon einige Jährchen alt sein. Alaska hatte Scopes eingeführt, die aber nicht gleich richtig funktionierten, und Roger hatte mit "DC_ScopeExpress()" ein System gebaut, das diese Schwächen ausgeglichen hat. Das war aber wirklich vor Ewigkeiten. Es ist alles noch drin, aber es hat keinen Sinn mehr.
*Mit DC_SetScopeArray() kann man eine Art Scope aus einem Array aus RecNos bauen. Man sammelt also Datensatznummern ein und filtert auf diesen, ohne ansonsten ein gemeinsames Kriterium für diese Datensätze zu haben, etwa, wenn mit Markierungen oder Auswahlsystemen gearbeitet wird.
*Mit DC_SetScopeArray() kann man eine Art Scope aus einem Array aus RecNos bauen. Man sammelt also Datensatznummern ein und filtert auf diesen, ohne ansonsten ein gemeinsames Kriterium für diese Datensätze zu haben, etwa, wenn mit Markierungen oder Auswahlsystemen gearbeitet wird.
Herzlich,
Tom
Tom
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2945
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: dcbrowse aktualisierung
Hallo Tom,
danke für diese Erklärung. Tja, da sieht man mal, wie lange man schon mit diesem Krempel arbeitet...
danke für diese Erklärung. Tja, da sieht man mal, wie lange man schon mit diesem Krempel arbeitet...
Viele Grüße
Wolfgang
Wolfgang