DCBROWSE Sort [erledigt]

Moderator: Moderatoren

Antworten
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 449
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Kontaktdaten:

DCBROWSE Sort [erledigt]

Beitrag von Ewald » Mo, 24. Jun 2019 14:13

Moin zusammen,
mir fällt da auf, das sich das gleiche Programm (Quellcode) für ein DCBROWSE unter 1.9 anders verhält als unter 2.0.
Wenn ich eine Spalte per Klick rauf oder runter sortiere steht unter 1.9 der Cursor anschließend immer in Zeile 1. Egal ob rauf oder runter sortiert wurde.
Unter 2.0 wird richtig sortiert, der Cursor steht aber anschließend bei der descending Sortierung in der letzten Zeile. Dagegen hilft mir auch kein
obrowse:gotop() in der sort() Funktion. Übersehe ich da einen neuen Parameter in EXPRESS++ ? Ich möchte erreichen, das der Cursor im Browserfenster nach jeder Sortierung - egal in welche Richtung - immer in der ersten Zeile steht.

Code: Alles auswählen

A <- Cursor
B
C
Sort der Spalte unter 1.9

Code: Alles auswählen

C <- Cursor
B
A
Sort der Spalte unter 2.0

Code: Alles auswählen

C 
B
A <- Cursor 
Zuletzt geändert von Ewald am Di, 02. Jul 2019 23:38, insgesamt 1-mal geändert.

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18935
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: DCBROWSE Sort

Beitrag von Manfred » Mo, 24. Jun 2019 14:19

Hallo Ewald,
hilft Dir vielleicht ein oBrowse:arrayElement := 1 weiter?
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7765
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: DCBROWSE Sort

Beitrag von Tom » Mo, 24. Jun 2019 14:20

Oder oBrowse:navigationMode auf XBPBRW_NAVIGATION_1XCOMPATIBLE?
Herzlich,
Tom

Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 449
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Kontaktdaten:

Re: DCBROWSE Sort

Beitrag von Ewald » Mo, 24. Jun 2019 15:25

Alle Vorschläge sind eingearbeitet. Das gewünschte Ergebnis stellt sich aber nicht ein.
Irgendwie macht das für mich auch keine Sinn ans Ende der Tabelle zu springen :?

Code: Alles auswählen

#include "dcdialog.ch"

proc main
local getlist:={}
aa:={{"A",1},{"B",2},{"C",3},{"E",4},{"F",5},{"G",6}}

bsortcol := {|a,n,o| fsort(aa,n,getlist) }

@ 01,01 dcbrowse ob1 data aa size 5,7 fit ;
        ;// navMode XBPBRW_NAVIGATION_1XCOMPATIBLE
        navmode XBPBRW_NAVIGATION_SYSTEM
dcbrowsecol element 1 parent ob1 header "Sp1" width 3 ;
            sort bsortcol LEFTBUTTON
dcbrowsecol element 2 parent ob1 header "Sp2" width 3 ;
            sort bsortcol LEFTBUTTON

@ 9,1 dcpushbutton caption "Ende " size 10,1 ;
       action {||dc_readguievent(DCGUI_EXIT_OK,Getlist)}

dcread gui fit ;
title "Test"

return

*------------------------------------------------------
func fsort (aarray,ncolumn,xlist)

asort ( aarray,,, {|x,y|x[ncolumn] < y[ncolumn] } )

ob1:arrayelement:=1
ob1:firstcol()
ob1:gotop()
ob1:refreshall()

*dc_getrefresh(xlist)

return .t.

*-----------------------------
proc appsys
return

Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 449
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Kontaktdaten:

Re: DCBROWSE Sort

Beitrag von Ewald » Di, 25. Jun 2019 16:25

Aha, jetzt kenne ich die Ursache. Die Funktion fsort() wird nur beim ersten Klick auf den Spaltenkopf aufgerufen. Dann wirkt auch ob1:gotop().
Beim zweiten und allen weiteren Klicks auf diesen Spaltenkopf wird die Funktion nicht mehr angesprungen. Da kann ich dann soviel gotop(), refresh() etc. reinschreiben wie ich will. Hilft mir aber erst mal wenig dieses Testergebnis.

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18935
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: DCBROWSE Sort

Beitrag von Manfred » Di, 25. Jun 2019 16:33

Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 449
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Kontaktdaten:

Re: DCBROWSE Sort

Beitrag von Ewald » Di, 25. Jun 2019 16:45

Moin Manfred,
da steht es ja das Problem - zumindest in den ersten Beiträgen. Dann weicht es etwas auf ;-)
Mein Problem ist tatsächlich, das die Funktion ab dem 2. mal nicht mehr angesprungen wird und ich nirgendwo die Chance habe, den Cursor automatisch in die erste Zeile des Browsers zu verschieben.

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18935
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: DCBROWSE Sort

Beitrag von Manfred » Di, 25. Jun 2019 16:50

Hallo Ewald,
ich verstehe das Problem trotzdem nicht. Ich benutze Version 2.0 1095 von xbase++ und express++ 20266. Wenn ich auf den Header klicke, wird einmal rauf und einmal runter sortiert Aber jedesmal steht der Cursor bei mir auf dem ersten Satz im Browse. Was meinst Du genau?
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 449
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Kontaktdaten:

Re: DCBROWSE Sort

Beitrag von Ewald » Di, 25. Jun 2019 17:11

Bei mir steht der Cursor eben nicht immer in der ersten Zeile des Browserfensters sondern nach dem 2. Klick am Ende der Tabelle bzw. auf der vorher markierten Position. Nach der Sortierung bleibt der Cursor an dieser Position stehen.
Vllt. kannst du ja das Beispiel von mir oben (ist kpl.) linken. Ich habe hier 2.00 1087 vom 29.3.2019 und 2.0 266. Warum meine frisch installierte 2.0 Version (alle Updates gemacht) kleiner ist als deine muss ich mal klären.

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18935
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: DCBROWSE Sort

Beitrag von Manfred » Di, 25. Jun 2019 17:17

hm, ich mache das so.

Code: Alles auswählen

DCBROWSECOL OBJECTVAR name;
                         HEADER "Name";
                         PARENT oDialogZusatz:oBrowse;
                           SORT {|aMousePos, nColPos, self| oDialogZusatz:MausImKopf(nColPos,"name","fahrer")}
 ********************************************************************************************************************************** 
 METHOD DialogDispo:MausImKopf(nColPos,cSpalte,cWoher)
       DEFAULT cWoher TO ""

       IF Upper(cWoher) == "FAHRER"
          IF At(::cBrowseSort,(STR(nColPos))) = 0
             ::cBrowseSort := "Spalte" + Alltrim(Str(nColPos)) + "rauf"
          ENDIF
          IF Upper(cSpalte) == "NAME"
             IF ::cBrowseSort == "Spalte" + Alltrim(Str(nColPos)) + "rauf"
                ASort(::aBrowse,,,{|x,y| x:name < y:name})
                ::cBrowseSort := "Spalte" + Alltrim(Str(nColPos)) + "runter"
             ELSE
                ASort(::aBrowse,,,{|x,y| x:name > y:name})
                ::cBrowseSort := "Spalte" + Alltrim(Str(nColPos)) + "rauf"
             ENDIF
          ELSEIF Upper(cSpalte) == "NUMMER"
             IF ::cBrowseSort == "Spalte" + Alltrim(Str(nColPos)) + "rauf"
                ASort(::aBrowse,,,{|x,y| x:nummer < y:nummer})
                ::cBrowseSort := "Spalte" + Alltrim(Str(nColPos)) + "runter"
             ELSE
                ASort(::aBrowse,,,{|x,y| x:nummer > y:nummer})
                ::cBrowseSort := "Spalte" + Alltrim(Str(nColPos)) + "rauf"
             ENDIF
          ENDIF
          ::cBrowseSortDoName := cSpalte
          ::oBrowse:gotop()
          ::oBrowse:refreshAll()
       ENDIF
RETURN self                         
                           
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 449
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Kontaktdaten:

Re: DCBROWSE Sort

Beitrag von Ewald » Di, 25. Jun 2019 17:50

Hallo Manfred - da habe ich etwas Quatsch erzählt.
Der Cursor steht auch bei mir nach der neuen Sortierung (abwärts) in der ersten Zeile. Aber in dem Fall ist die erste Zeile das Ende der Tabelle. Um zum Anfang der Tabelle zu kommen (eigentlich obrowse:gotop()) muss der User den Scrollbalken hochschieben.

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18935
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: DCBROWSE Sort

Beitrag von Manfred » Di, 25. Jun 2019 20:04

Hallo Ewald,
ich weiß, wir sind nicht mehr die Jüngsten :lol: steht der Cursor jetzt ganz oben oder ganz unten? Weil 1.Stelle ist für mich immer ganz oben, direkt unter dem Header. Egal wie sortiert. Und das tut er bei mir auf jeden Fall.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 449
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Kontaktdaten:

Re: DCBROWSE Sort

Beitrag von Ewald » Di, 25. Jun 2019 20:44

Fast muss ich nachkucken :oops: Der Cursor steht ganz oben. Aaaaber - er soll auch auf das erste Arrayelement zeigen. Er seht aber in der ersten Zeile und markiert bei der descend Sortierung das letzte Array element. OK hätte ich unter 1.9 noch gesagt obrowse:gotop(). Und das genau ist das Problem. Das würde in der sort Funktion aufgerufen - die aber nur bei der ersten Sortierung angesprungen wird.

Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 449
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Kontaktdaten:

Re: DCBROWSE Sort

Beitrag von Ewald » Di, 25. Jun 2019 22:45

Vielleicht sagt ein Bild ja mehr als 1000 Worte.
Aus nachvollziehbaren Gründen möchten die User nicht den Scrollbalken hochschieben.

vom 2. zum 3. Bild fehlt mir das obrowse:gotop() aus der sort() Funktion.

Bild

Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 449
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Kontaktdaten:

Re: DCBROWSE Sort [erledigt]

Beitrag von Ewald » Di, 02. Jul 2019 23:45

Die Ursache für dieses Verhalten habe ich rausgeprockelt. Im _dcxbrow.prg der 266 waren die Zeilen die das eigentlich steuern auskommentiert :confused2:

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18935
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: DCBROWSE Sort [erledigt]

Beitrag von Manfred » Mi, 03. Jul 2019 7:19

und, welche waren es und wo sind sie zu finden?
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 449
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Kontaktdaten:

Re: DCBROWSE Sort [erledigt]

Beitrag von Ewald » Mi, 03. Jul 2019 8:47

Moin Manfred,
Zeile 3348 + 3360. Aber Vorsicht … habe ich durch try & error rausgeprockelt. Keine Ahnung warum das gemacht wurde und ob die Reaktivierung nicht irgendwo an anderer Stelle Probleme macht. Ich habe dadurch bisher eine Sorge weniger ...

Benutzeravatar
Hans Zethofer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 273
Registriert: Fr, 27. Jan 2006 8:29
Wohnort: 2700 Wiener Neustadt
Kontaktdaten:

Re: DCBROWSE Sort [erledigt]

Beitrag von Hans Zethofer » Mi, 03. Jul 2019 9:04

Frag mal Roger warum er das so gemacht hat!
_____________
lg
Hans

Antworten