Verwendung von bSortCol bei DCBROWSE

Moderator: Moderatoren

Antworten
Werner
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 118
Registriert: Sa, 18. Mär 2006 16:08

Verwendung von bSortCol bei DCBROWSE

Beitrag von Werner »

Hi!

Ich möchte eine Datenbank mit einem Klick auf den Spaltenkopf sortieren lassen. Dies funktioniert auch, nur ich finde hinterher den ausgewählten Datensatz nicht mehr. Ich weiss, dass dies mit CARGO funktionieren soll, aber ich kann das nicht! Kann mir jemand kurz skizzieren, wie bzw. wo ich den mit dem Cursor oder mit der Pfeiltaste ausgewählten Datensatz (blau hinterlegt) hinterher nach einer Sortierung über bSortCol wiederfinden kann?

Mein Quellcode lautet wie folgt:

Code: Alles auswählen

@ 3,1 DCBROWSE oBrowse DATA oBrowData;
         SIZE 11,19;
         CURSORMODE XBPBRW_CURSOR_ROW;
         PRESENTATION aPres;
         EVAL {IoIo:itemMarked := ;
         {IILoadName(aName,DCGETREFRESH_TYPE_EXCLUDE, {GETLIST_BROWSE}),;
             SetAppFocus(oBrcol1) } }

bSortCol := {Ia,n,oI _XSample50(bDirectory,n)}

DCBROWSECOL ELEMENT 1;
                        WIDTH 2;
                        OBJECT oBrcol1;
                        HEADER "VArt" PARENT oBrowse;
                        ID 'BROWSE_COD'
                        SORT bSortCol LEFTBUTTON

DCBROWSECOL ELEMENT 2;
                        WIDTH 6;
                        OBJECT oBrcol1;
                        HEADER "Pers.Nr" PARENT oBrowse;
                        ID 'BROWSE_COD'
                        SORT bSortCol LEFTBUTTON

....


DCREAD GUI FIT;
   To lOk;
   PARENT oDlg;
   ADDBUTTONS ;
   TITLE 'XYZ' ;
   SETFOCUS @oBrowse;
   HANDLER BrowseHandler2 REFERENCE aName;
   TIMEOUT 300

RETURN nil

STATIC FUNCTION LoadName ( aName, nRefreshMode, aRefreshList)
C_NAME := 'Ausgewähler Fall: '+GRUND->ZNAME

If nRefreshMode = nil .OR: nRefreshMode > -1
DC_GetRfresh(bGetList, nil, nRefreshMode, aRefreshList)
DC_GetOrigSet(bGetList)

satzx := recno()  // Datensatznummer des ausgewählten Datensatzes

Return nil

STATIC FUNCTION;
  BROWSEHandler2 (nEvent, mp1,mp2,oXbp, oDialog, GetList, aName)

Do Case
   case nEvent = xbeP_Keyboard .and. mp1 == xBek_RETURN
      RETURN DCGUI_EXIT_OK
   case nEvent == xbeM_LbDblClick
      RETURN DCGUI_EXIT_OK
   case nEvent = xbeP_Keyboard .and. mp1 == xbeK_ESC
      RETURN DCGUI_EXIT_ABORT
endcase

RETURN DCGUI_NONE
Dieser Quellcode wurde im wesentlichen aus der _XSAMPLE50 übernommen.

Vielleicht kann mir jemand helfen!

Gruß Werner
Zuletzt geändert von Jan am Mo, 08. Apr 2013 10:54, insgesamt 1-mal geändert.
Grund: Code als Code formatiert
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: Verwendung von bSortCol bei DCBROWSE

Beitrag von Manfred »

Da das Thema wohl zu express++ gehört, habe ich es mal hierhin geschoben
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: Verwendung von bSortCol bei DCBROWSE

Beitrag von Tom »

DC_BrowseRow(oBrowse) liefert Dir jederzeit die Arrayzeile zurück, in der sich das Browse befindet, also eine Referenz auf die Position im Array. Mit oBrowse:arrayElement := x kannst Du ein Arraybrowse dazu zwingen, zu einer bestimmten Zeile zu springen (ggf. anschließend noch ein RefreshAll() auslösen). Welches diese Zeile ist, musst Du Dir aber vor dem Sortierungsvorgang irgendwie merken, denn das Array wird ja tatsächlich sortiert. Es sollte also eine Markierungs-/Zählungsspalte enthalten, die Du im sortierten Array mit aScan() wiederfinden kannst, um dann oBrowse:arrayElement zu bestücken.
Herzlich,
Tom
Antworten