habe ein Browse mit unterschiedlichen Preiskategorien.
Je nach Auswahl durch den Anwender, soll nur PreisA, PreisB
oder PreisC in der Spalte angezeigt werden.
Geht das überhaupt - oder muß ich drei identische Browse aufbauen
und nur die unterschiedlichen Preisfelder entsprechend einsetzen?
STATIC FUNCTION _SetHeader(aLocals)
// setze neuen Text für Spaltenkopf
LOCAL oColumn, cHeader
oColumn := oAppBrow2:GetColumn(3)
DO CASE
CASE nGroup = 1
cHeader := "Preis A"
CASE nGroup = 2
cHeader := "Preis B"
CASE nGroup = 3
cHeader := "Preis C"
ENDCASE
oColumn:headerCaption := cHeader // Text Spaltenkopf
RETURN nil
jetzt muß ich auch mal fragen: geht das auch während des Betriebs, also wenn man zwischendurch den Wert ändert? Hide wird doch mit einem Codeblock versehen, wenn der Rückgabewert sich ändert, kann man dann eine Spalte ein- ausblenden, ohne den Browser neu zusammenzubauen? Ich bekomme das im Moment nicht hin.
Laut Rogers Beschreibung kann HEADER auch ein Codeblock sein, dann sollte e sich auch während der Laufzeit ändern können.
Dann bräuchtest du nichts ein- oder ausblenden. EInfach mal ausprobieren
?
Ich möchte/muß mal die und dann mal die Spalte haben. Dachte aber, wenn man mit Hide einen Codeblock hinterlegt, der das prüft, könnte das bewerkstelligt werden. Header wechselt doch nur die Überschrift. Das hilft mir nicht weiter.
Hast du denn in deinem Codeblock für HIDE auch ein dc_getrefresh(Getlist) drin ?
Quatsch.
Du must nach Ändern des Wertes für die HIDE Bedingung ein Refresh machen.
Zuletzt geändert von Wolfgang Ciriack am Mo, 10. Jun 2019 8:36, insgesamt 1-mal geändert.
sagen wir mal so, wenn sich der Wert, der dafür sorgen soll das die Spalte versteckt oder angezeigt werden soll ändert, wird danach ein dc_getrefresh(getlist) durchgeführt. Das wirkt aber nicht.
also x_screen wird vom Inhalt her in einer Funktion geändert und dann kommt ein refresh. Am Anfang ist die Spalte ausgeblendet und soll dann entsprechend eingeblendet werden. Das klappt nicht.
meine Frage ist ja, ob es überhaupt vom System her vorgesehen ist mitten im Betrieb Spalten anzuzeigen oder auszublenden. Ich kann im Moment nichts dazu finden in der Xbase Hilfe
OK, ich habe gerade mal einen Versuch gestartet. Ich habe die Spalte anzeigen lassen und dann konnte ich sie ausblenden. Danach wenn ich sie wieder einschalte, dann überlagert sie die ersten Spalten. Ist also doch nicht so einfach mit mal eben aus/einschalten.
das läßt vermuten, das man mit der Technik keine x verschiedenen Browseraufbauten erzeugen kann um sie dann mit Hide entsprechend zusammenzustellen. Wie müßte man dann sowas lösen? Breite der Spalten mal auf 0 und dann wieder auf Ursprungswert setzen?
ja leider. 7 Stück an der Zahl. Ich baue gerade eine Anwendung um und muß deshalb Zwischenlösungen akzeptieren. Der Vorgänger hat mit Appbrowse gearbeitet, was ich jetzt Schritt für Schritt austauschen muß. Das war immer in einer Do While Schleife und konnte somit die verschiedenen Browserkonfigurationen aufbauen.
hm, wie meinst Du das? 7x Dcbrowse machen, aber dann mit Hide jeweils nur 1 anzeigen und den rest verschwinden lassen. Also alle übereinanderlagern? Klingt nicht schlecht, die Idee hatte ich auch schonmal, aber irgendwie nicht weiter verfolgt.
Na du erzeugst alle deine möglichen Browses
...DCBROWSE oBrw1..... HIDE {|| nAnzeige<>1}...
mit entsprechenden Spalten
...DCBROWSE oBrw2..... HIDE {|| nAnzeige<>2}...
mit entsprechenden Spalten
usw. bis 7
und steuerst die Anzeige der Browses über die Variable nAnzeige.
HI Wolfgang,
ist schon klar. Ich hatte ganz zu Anfang nur die Spalten im Visir und das erschien mir etwas zu blöde. Aber an den ganzen Browser hatte ich gar nicht gedacht. Ich probiere es gerade. Scheint mir aber eine gute Lösung zu sein.
Die iVar "visible" kennt die Column-Klasse nicht, weshalb sie nicht - wie andere XbParts - mit Hide() und Show() versteckt und angezeigt werden kann. XbpBrowse-Columns bestehen aus bis zu drei Cellgroups, die auf Statics basieren, die wiederum gemeinsam mit den anderen Spalten und ggf. Scrollbars auf einem Static liegen, das das gesamte Browse enthält. Wenn eine Spalte verschwindet, müssen andere heranrücken, und umgekehrt. Das ist ein wenig komplizierter als bei Standard-XbParts, die sozusagen einfach ihren Platz räumen, wenn sie versteckt werden, und ihn wieder einnehmen, wenn sie angezeigt werden. Im Browse ändern sich die Ordinalpositionen der anderen Spalten und vieles mehr (ColCount, ...). Wenn man dann auch noch mit "frozen columns" arbeitet, wird es ganz haarig.
Deshalb muss man Spalten auch mit DelColumn() entfernen und mit AddColumn() wieder hinzufügen, gleichzeitig müssen sie mit den richtigen Präsentationsparametern versehen werden - und sie müssen bestimmte Eigenschaften des Browses erben (Ownerdrawing), das ist alles nicht ganz einfach. Roger hat versucht, das nachzuahmen, aber so richtig funktioniert hat das meines Erachtens nie. Es blieben immer Artefakte der Header, dann stimmte die Zeilenhöhe plötzlich nicht mehr usw. usf. Ich habe das deshalb überall durch eigene Funktionalitäten ersetzt. Spalten, die auch mal verschwinden dürfen, werden mit dem (versteckten) Browse aufgebaut und dann mit DelColumn() entfernt. Wenn man sie braucht, werden sie mit AddColumn() hinzugefügt. Nur so ist es halbwegs verlässlich.