derzeit programmiere ich an einer Anwendung, die in der Stammdatenverwaltung ein (modifiziertes) XbpBrowse() anzeigt und durch Klick auf den Spaltenkopf den Browse neu nach dieser Spalte sortiert (unter Verwendung von MySQL). Klappt hervorragend.
Problem: die Browse-Anzeige bleibt unverändert, so dass nicht auf Anhieb erkennbar ist, nach welcher Spalte nun sortiert ist.
Ich habe dann zu Tom's Beispielen aus dem Hennies zu dem Thema gegriffen und folgende Methode geschrieben:
Code: Alles auswählen
METHOD MaintenanceModule:CustomDrawCell(oPS, aInfo, aSortOrder)
Local aPP
Local nAlign, nFound
Local oArea, oCol
Local xData
oArea := aInfo[XBP_DRAWINFO_AREA]
xData := oArea:GetCell(1)
IF oArea:setParent():heading == oArea
oCol := aInfo[6]
IF oCol:lSortedBy .OR. oCol:SQLColLink == aSortOrder[1]
nAlign := XBPALIGN_VCENTER+XBPALIGN_HCENTER
aPP := oArea:SetParent():SetPresParam()
nFound := AScan(aPP,{|a|Valtype(a[1])=='N' .AND. a[1]==XBP_PP_COL_DA_CELLALIGNMENT } )
IF nFound > 0 .and. aPP[nFound,2] <> nil
nAlign := aPP[nFound,2]
ENDIF
GraCaptionStr(oPS, aInfo[XBP_DRAWINFO_RECT],;
{aInfo[XBP_DRAWINFO_RECT, 3], aInfo[XBP_DRAWINFO_RECT, 4]},;
xData, nAlign)
RETU(.F.)
ENDIF
RETU(.T.)
ENDIF
RETURN (.T.)
Über oArea:setParent():heading versuche ich, festzustellen, ob gerade der Header-Bereich (Spaltenüberschrift) zur Bearbeitung ansteht. Alles andere interessiert mich nicht und wird mit RETU(.T.) vom System gezeichnet.
oCol:lsortedBy ist eine von mir in der abgeleiteten Klasse definierte iVar, die gesetzt ist, wenn nach der betreffenden Spalte sortiert wird. Bei der ersten Anzeige ist dies der primary key.
Aktuell funktioniert es (fast). Die Spaltenüberschrift, nach der sortiert wird, erscheint nämlich nicht. Beim ersten Aufruf wäre das "Artikelnummer", der Spaltenkopf ist leer. Klicke ich auf "Bezeichnung 1", erscheint "Artikelnummer" wieder als Spaltenkopf der ersten Spalte, und in der zweiten Spalte verschwindet "Bezeichnung 1".
Nun bin ich ein wenig verwirrt, vorsichtig formuliert.