DCBROWSE Sort [erledigt]

Moderator: Moderatoren

Antworten
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

DCBROWSE Sort [erledigt]

Beitrag von Ewald »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE Sort

Beitrag von Manfred »

Hallo Ewald,
hilft Dir vielleicht ein oBrowse:arrayElement := 1 weiter?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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 Sort

Beitrag von Tom »

Oder oBrowse:navigationMode auf XBPBRW_NAVIGATION_1XCOMPATIBLE?
Herzlich,
Tom
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DCBROWSE Sort

Beitrag von Ewald »

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: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DCBROWSE Sort

Beitrag von Ewald »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE Sort

Beitrag von Manfred »

Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DCBROWSE Sort

Beitrag von Ewald »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE Sort

Beitrag von Manfred »

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 Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DCBROWSE Sort

Beitrag von Ewald »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE Sort

Beitrag von Manfred »

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 Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DCBROWSE Sort

Beitrag von Ewald »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE Sort

Beitrag von Manfred »

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 Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DCBROWSE Sort

Beitrag von Ewald »

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: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DCBROWSE Sort

Beitrag von Ewald »

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: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DCBROWSE Sort [erledigt]

Beitrag von Ewald »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE Sort [erledigt]

Beitrag von Manfred »

und, welche waren es und wo sind sie zu finden?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DCBROWSE Sort [erledigt]

Beitrag von Ewald »

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: 278
Registriert: Fr, 27. Jan 2006 8:29
Wohnort: 2700 Wiener Neustadt
Hat sich bedankt: 1 Mal
Kontaktdaten:

Re: DCBROWSE Sort [erledigt]

Beitrag von Hans Zethofer »

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