dcbrowse aktualisierung

Moderator: Moderatoren

Antworten
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

dcbrowse aktualisierung

Beitrag von Peter Schweizer »

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
Gruss Peter
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: dcbrowse aktualisierung

Beitrag von Wolfgang Ciriack »

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.
Viele Grüße
Wolfgang
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Re: dcbrowse aktualisierung

Beitrag von Peter Schweizer »

Danke Wolfgang für Deine Antwort,

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)}
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
Gruss Peter
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: dcbrowse aktualisierung

Beitrag von Wolfgang Ciriack »

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.
Viele Grüße
Wolfgang
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Re: dcbrowse aktualisierung

Beitrag von Peter Schweizer »

Danke Wolfgang,
nach weglassen des DbGoTo(nNeu) funktioniert es zumindest wieder.
Über die Anzeigesteuerung muß ich nochmals brüten.

Gruß Peter
Gruss Peter
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: dcbrowse aktualisierung

Beitrag von Tom »

DbGotop() berücksichtigt Scopes nicht? :o 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
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: dcbrowse aktualisierung

Beitrag von Wolfgang Ciriack »

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.
Viele Grüße
Wolfgang
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: dcbrowse aktualisierung

Beitrag von Tom »

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.
Herzlich,
Tom
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: dcbrowse aktualisierung

Beitrag von Wolfgang Ciriack »

Hallo Tom,
danke für diese Erklärung. Tja, da sieht man mal, wie lange man schon mit diesem Krempel arbeitet... :lol:
Viele Grüße
Wolfgang
Antworten