CrystalReports: Positionshintergrund mit alternierenden Farben

Aus GEVITAS
Version vom 26. März 2013, 14:01 Uhr von Gevitas (Diskussion | Beiträge) (Formel im Detailsbereich)
Wechseln zu: Navigation, Suche

1 Anforderung

Der Hintergrund der Positionen (Detail-Bereich) soll abwechselnd weiß und farbig sein.

2 Lösungsansatz

Dieser Lösungsansatz sieht so aus:

  • Man erstellt in einer Formel im Berichtskopf eine Variable, die man auf "Tue" (=Wahr, eingeschaltet) setzt.
  • Im Positionsbereich (also den Details) hat man eine zweite Formel, die den Zustand der Variable immer umkehrt, also von "True" auf "False" oder umgekehrt. Diese Formel kommt in den Detailereich und liefert also abwechselnd "True" oder "False" zurück.
  • Im Selektionsassistent des Detailbereichs "-> Farbe" gibt man nun an, welche Farbe verwendet werden soll, wenn die Variable auf "True" steht.

2.1 Formel im Berichtskopf

Erstellen Sie eine neue Formel "HintergrundDunkel_Init" mit diesem Inhalt:

// Erstellt eine "Shared"-Variable, die auch in anderen Formeln verwendet werden kann:
// booleanVar : Die Variable kann True oder False (Wahr oder Falsch) annehmen.
// Setzt die Variable dann auf einen definierten Anfangszustand.
// Im Berichskopf platzieren!
Shared booleanVar bDunkel;

bDunkel := True;

2.2 Formel im Detailsbereich

Erstellen Sie eine neue Formel "HintergrundDunkel_EinAus" mit diesem Inhalt:

// Mit dieser Formel wird die Variable bei jedem Aufruf umgekehrt:
// Aus True wird False und umgekehrt!
// Im Detail-Bereich platzieren.
whileprintingRecords; 

Shared booleanVar bDunkel; 

// Ein- und ausschalten des Merkers:
bDunkel := not bDunkel;

// Rückgabe des neuen Wertes: 
bDunkel;

2.3 Formel verwenden

Im Selektionsassistent des Detailbereichs "-> Farbe" gibt man nun an, ob bzw. welche Farbe verwendet werden soll, wenn die Variable auf "True" steht:

// Diese Formel für bedingte Formatierung muss einen der folgenden Werte zurückgeben Konstanten für die Farbe:
whileprintingRecords; 
 
Shared booleanVar bDunkel;  

if bDunkel=True then
 crSilver
else
 crNoColor;