SSRS: Holen Sie backgroundfarbe von Cell

Ich habe einen Bericht als Tisch. Ich möchte für jede Spalte eine randome backgroundfarbe setzen.

Dafür habe ich ein benutzerdefiniertes Skript erstellt:

Public Function GetColor() Dim intHighNumber AS Decimal = 255 Dim intLowNumber AS Decimal = 100 Dim NewColor AS String Dim Red AS Decimal = Int((intHighNumber - intLowNumber + 1) * Rnd + intLowNumber) Dim Green AS Decimal = Int((intHighNumber - intLowNumber + 1) * Rnd + intLowNumber) Dim Blue AS Decimal = Int((intHighNumber - intLowNumber + 1) * Rnd + intLowNumber) NewColor = "#" & Hex(Red) & Hex(Green) & Hex(Blue) Return NewColor End Function 

In der ersten Zelle stelle ich den Fill Expression auf: = code.GetColor () Bis hier funktioniert es perfekt, aber jetzt will ich die gleiche Farbe für den Rest der Spalte … also habe ich in den Ausdruck "= Fields! MyField" puted .BackgroundColor "aber das wird nicht funktionieren …

Ich weiß nicht, wie man das beheben kann …

Vielen dank für Deine Hilfe 🙂

Was Sie tun müssen, ist, sich an die Farbeinstellung für die Spalte zu erinnern, damit Sie sie in Header, Footers etc. wiederverwenden können. Wir können dies mit einem Array erreichen, das eine neue Farbe zurückführt, die das erste Mal aufgerufen wird, und die gleiche Farbe für diesen Index, wenn das Farbe wurde zuvor zugewiesen.

Hier ist der benutzerdefinierte Code:

 Dim Colors(0 to 9) As String Function GetColor(Color As Integer) As String Dim intHighNumber AS Decimal = 255 Dim intLowNumber AS Decimal = 100 Dim ThisColor AS String if (Colors(Color) <> "") Then ThisColor = Colors(Color) else Dim Red AS Decimal = Int((intHighNumber - intLowNumber + 1) * Rnd + intLowNumber) Dim Green AS Decimal = Int((intHighNumber - intLowNumber + 1) * Rnd + intLowNumber) Dim Blue AS Decimal = Int((intHighNumber - intLowNumber + 1) * Rnd + intLowNumber) ThisColor = "#" & Hex(Red) & Hex(Green) & Hex(Blue) Colors(Color) = ThisColor End If Return ThisColor End Function 

Dann in euren Zellen, rufen Sie einfach die GetColor function an, die die GetColor übergibt, die die Zelle haben soll. Zum Beispiel wäre der Kopf-Kopf-, Detail- und Fußzeilen-Zellen- BackgroundColorBackgroundColor Property-Ausdruck der ersten Spalte:

 =Code.GetColor(0) 

Dann verwenden Sie einfach einen anderen Farbindex für jede Spalte.

Vergewissern Sie sich, dass Sie das Array mit genügend Platz dimensionieren, um alle Ihre colors zu speichern (oder Sie könnten auch ReDim Ihr Array jedes Mal, wenn Sie eine neue Farbe hinzufügen, wenn Sie ein dynamisches Array stattdessen verwenden möchten).

 Private string _LastColorUser="" Public Function LastColorUsed() Return _LastColorUsed End Function Public Function GetColor() Dim intHighNumber AS Decimal = 255 Dim intLowNumber AS Decimal = 100 Dim NewColor AS String Dim Red AS Decimal = Int((intHighNumber - intLowNumber + 1) * Rnd + intLowNumber) Dim Green AS Decimal = Int((intHighNumber - intLowNumber + 1) * Rnd + intLowNumber) Dim Blue AS Decimal = Int((intHighNumber - intLowNumber + 1) * Rnd + intLowNumber) NewColor = "#" & Hex(Red) & Hex(Green) & Hex(Blue) _LastColorUser=NewColor; Return NewColor End Function 

@Chris Danke, das ist, was ich brauchte Weil meine Spalten dynamisch waren, musste ich eine andere function schreiben, um eine Nummer zu bekommen:

 Public Function GetColumnNumber(ByVal parameter as Parameter,ByVal SSID As String) as String For i as integer = 0 to parameter.Count-1 If CStr(parameter.Value(i)) = SSID THEN Return i END IF Next End Function 

In der Zelle schrieb ich:

 =code.GetColor(code.GetColumnNumber(Parameters!SSID,Fields!SSID.Value)) 

Danke noch einmal 🙂