Subject: | Re: Sortering
| Date: | Mon, 15 Jun 2020 11:04:06 +0200
| From: | Anders Jonsson <andersREMOVETHIS@jonssondata.se>
| Newsgroups: | pnews.paradox-intl-se
|
Den 2020-05-13 kl. 11:31, skrev Bengt Ahling:
> Hej
>
> Jag har ett formulär med en tabell. Hur ska jag göra om jag vill att
> användaren ska kunna sortera en viss kolumn t ex i bokstavsordning eller
> sifferordning? Helst skulle man vilja kunna klicka på rubriken så att
> sorteringen sker.
>
> Hälsningar
> Bengt
Hej
Detta går att göra men det beror lite på din setup.
Själv jobbar jag med lokala tabeller som är svar på SQL-frågor. De är
alltså alltid "frikopplade" och jag kan sortera hur jag vill med kod.
Jag misstänker att du jobbar direkt mot datatabellerna och då krävs ett
sekundärt index för att det skall fungera.
Jag har kod på formulärets action metod som ser ut så här:
method mouseClick(var eventInfo MouseEvent)
var
uiTarget, uiCont uiObject
stText, stKolumn string
endvar
if eventInfo.isPreFilter() then
;// This code executes for each object on the form
eventinfo.GetTarget(uiTarget)
if uiTarget.Class="Text"
then
uiCont.attach(uiTarget.ContainerName)
if uiCont.class="Header"
then
;man har klickat på en text i tabell headern
;det innebär att man vill sortera
stKolumn=uiTarget.HotKeyTarget
cmSortera(stKolumn)
else
;inte i en Header
endif
else
;inte en text
endif
else
;// This code executes only for the form
endIf
endMethod
Det intressanta är alltså "HotKeyTarget" som är egenskap som normalt
sett ger fältnamnet på kolumnen och därmed vet man generellt vilken
kolumn man har klickat på!
Metoden för sorteringe ser ut så här:
method cmSortera(stKolumn string)
if stKolumn.isblank()
then
MsgInfo("Går ej","Inte ett möjligt sorteringsbegrepp.")
return
else
endif
;Man vill sortera
;if stKolumn="Kommentar" then MsgInfo("Går ej","Detta fält är inte
sorteringsbart.") return endif ;går inte att sortera på memo fält
setMouseShape(MouseWait)
if stKolumn=stSorteradPa
then ;samma sortering - byt bara riktning
if stSorteringsRiktning="ASC"
then
stSorteringsRiktning="DESC"
else
stSorteringsRiktning="ASC"
endif
else
;ny kolumn
stSorteradPa=stKolumn
stSorteringsRiktning="ASC"
endif
if libGeneral.TFsortera(stMaster,stKolumn+" "+stSorteringsRiktning)
then
;sorteringen gick bra
uiMaster.postAction(DataBegin)
else
MsgStop("FEL","Kunde inte sortera.")
endif
setMouseShape(MouseArrow)
endMethod
Och som du ser här så är det ett library som utför sorteringen men det
har du nog ingen nytta av eftersom jag som sagt använder lokala tabeller.
Sorry om det är lite rörigt men här har du i alla fall något att börja med.
Jag läser bara newsgroupen då och då så svaren kan ta lite tid.
Ha en fin midsommar!
Anders
|