DCBrowse Spaltenanzeige abhängig vom gesetzen M. [ERLEDIGT]

Moderator: Moderatoren

Klaus Stebner
UDF-Programmierer
UDF-Programmierer
Beiträge: 66
Registriert: Fr, 29. Feb 2008 20:53
Wohnort: Furtwangen

DCBrowse Spaltenanzeige abhängig vom gesetzen M. [ERLEDIGT]

Beitrag von Klaus Stebner »

Hallo,

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?


mit HIDE funkt es jedenfalls nicht!

Code: Alles auswählen

   DCBROWSECOL FIELD TPL->preis_a  HEADER 'Preis A' PARENT oAppBrow2 ;
     EVAL { |o| o:colorBlock := fColor } ;
     HIDE {||nGroup <> 1 }    ;
     WIDTH 4

   DCBROWSECOL FIELD TPL->preis_b  HEADER 'Preis B' PARENT oAppBrow2 ;
     EVAL { |o| o:colorBlock := fColor } ;
     HIDE {||nGroup <> 2 }    ;
     WIDTH 4
Zuletzt geändert von Klaus Stebner am Mo, 28. Jan 2013 6:29, insgesamt 1-mal geändert.
Gruß Klaus
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: DCBrowse Spaltenanzeige abhängig vom gesetzen Merker

Beitrag von Martin Altmann »

Klaus,
könntest Du nicht mit iif() arbeiten?
Bsp:

Code: Alles auswählen

 DCBROWSECOL FIELD iif( lA, TPL->preis_a, iif( lB, TPL->preis_b, TPL->preis_c ) )  HEADER 'Preis ' + iif( lA, "A", iif( lB, "B", "C" ) ) PARENT oAppBrow2 ;
     EVAL { |o| o:colorBlock := fColor } ;
     HIDE {||nGroup <> iif( lA, 1, iif( lB, 2, 3 ) ) }    ;
     WIDTH 4
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Klaus Stebner
UDF-Programmierer
UDF-Programmierer
Beiträge: 66
Registriert: Fr, 29. Feb 2008 20:53
Wohnort: Furtwangen

Re: DCBrowse Spaltenanzeige abhängig vom gesetzen Merker

Beitrag von Klaus Stebner »

Hallo Martin,

werde es gleich mal testen!
Gruß Klaus
Klaus Stebner
UDF-Programmierer
UDF-Programmierer
Beiträge: 66
Registriert: Fr, 29. Feb 2008 20:53
Wohnort: Furtwangen

Re: DCBrowse Spaltenanzeige abhängig vom gesetzen Merker

Beitrag von Klaus Stebner »

Hallo Martin,

danke für Deine Idee - funkt aber leider nicht.

Bringt schon beim Kompilieren den Fehler: "error XBT0231: Invalid lvalue".
Muß mir was anderes überlegen.
Gruß Klaus
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: DCBrowse Spaltenanzeige abhängig vom gesetzen Merker

Beitrag von Wolfgang Ciriack »

Hallo Klaus,
nimm mal einen Codeblock dafür:

Code: Alles auswählen

DCBROWSECOL DATA {|| iif( lA, TPL->preis_a, iif( lB, TPL->preis_b, TPL->preis_c ) ) } HEADER  'Preis ' + iif( lA, "A", iif( lB, "B", "C" ) ) PARENT oAppBrow2 ;
Viele Grüße
Wolfgang
Klaus Stebner
UDF-Programmierer
UDF-Programmierer
Beiträge: 66
Registriert: Fr, 29. Feb 2008 20:53
Wohnort: Furtwangen

Re: DCBrowse [erledigt] Spaltenanzeige abhängig vom gesetze

Beitrag von Klaus Stebner »

Hallo Wolfgang,

das funkt!

Mit header geht es zwar nicht, aber das habe ich so gelöst:

Code: Alles auswählen

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
@Martin, der Ansatz war richtig.

Danke Euch beiden
Gruß Klaus
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 Spaltenanzeige abhängig vom gesetzen M. [ERLEDIGT]

Beitrag von Manfred »

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.
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
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: DCBrowse Spaltenanzeige abhängig vom gesetzen M. [ERLEDIGT]

Beitrag von Wolfgang Ciriack »

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 :D
Viele Grüße
Wolfgang
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 Spaltenanzeige abhängig vom gesetzen M. [ERLEDIGT]

Beitrag von Manfred »

?
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.
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
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: DCBrowse Spaltenanzeige abhängig vom gesetzen M. [ERLEDIGT]

Beitrag von Wolfgang Ciriack »

Ah, sorry, ich hatte die Beiträge davor gelesen, mit der Header Funktion und mich darauf bezogen.
Viele Grüße
Wolfgang
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: DCBrowse Spaltenanzeige abhängig vom gesetzen M. [ERLEDIGT]

Beitrag von Wolfgang Ciriack »

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.
Viele Grüße
Wolfgang
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 Spaltenanzeige abhängig vom gesetzen M. [ERLEDIGT]

Beitrag von Manfred »

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.

Code: Alles auswählen

DCBROWSECOL OBJECTVAR status;
                        HEADER "Status";
                          HIDE {|| IF(x_screen == "GESAMT",.F.,.T.)};
                        PARENT oDialogZusatz:oBrowse;
                          SORT {|aMousePos, nColPos, self| oDialogZusatz:MausImKopf(nColPos,"status")};
                       TOOLTIP "rechte Maustaste sortiert die Spalte"
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.
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
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 Spaltenanzeige abhängig vom gesetzen M. [ERLEDIGT]

Beitrag von Manfred »

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
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
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: DCBrowse Spaltenanzeige abhängig vom gesetzen M. [ERLEDIGT]

Beitrag von Wolfgang Ciriack »

Sollte eigentlich so klappen. Ändere doch mal deinen Codeblock in HIDE {|| x_gesamt=="GESAMT", DC_WinAlert(x_gesamt) } und schau, was ausgegeben wird.
Viele Grüße
Wolfgang
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: DCBrowse Spaltenanzeige abhängig vom gesetzen M. [ERLEDIGT]

Beitrag von Wolfgang Ciriack »

Ja, habe es pobiert, es sieht nicht schön aus (weil am Ende ein nicht benutzer Bereich des Browses angezeigt wird), aber es klappt.
Viele Grüße
Wolfgang
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 Spaltenanzeige abhängig vom gesetzen M. [ERLEDIGT]

Beitrag von Manfred »

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.
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
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 Spaltenanzeige abhängig vom gesetzen M. [ERLEDIGT]

Beitrag von Manfred »

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?
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
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: DCBrowse Spaltenanzeige abhängig vom gesetzen M. [ERLEDIGT]

Beitrag von Wolfgang Ciriack »

Benötigst du denn während der Laufzeit so viele unterschiedlich konfigurierte Browses ?
Viele Grüße
Wolfgang
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 Spaltenanzeige abhängig vom gesetzen M. [ERLEDIGT]

Beitrag von Manfred »

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.
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
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: DCBrowse Spaltenanzeige abhängig vom gesetzen M. [ERLEDIGT]

Beitrag von Wolfgang Ciriack »

Bau dir doch alle 7 auf und blende sie komplett mit HIDE bei DCBROWSE aus.
Viele Grüße
Wolfgang
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 Spaltenanzeige abhängig vom gesetzen M. [ERLEDIGT]

Beitrag von Manfred »

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.
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
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: DCBrowse Spaltenanzeige abhängig vom gesetzen M. [ERLEDIGT]

Beitrag von Wolfgang Ciriack »

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.
Viele Grüße
Wolfgang
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 Spaltenanzeige abhängig vom gesetzen M. [ERLEDIGT]

Beitrag von Manfred »

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.
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
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: DCBrowse Spaltenanzeige abhängig vom gesetzen M. [ERLEDIGT]

Beitrag von Wolfgang Ciriack »

Ich denke auch, da das Flackern vom Spalten aus-/einblenden entfällt
Viele Grüße
Wolfgang
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 Spaltenanzeige abhängig vom gesetzen M. [ERLEDIGT]

Beitrag von Tom »

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.
Herzlich,
Tom
Antworten