Visual C#RDLC报告基于背景值的动态文本着色

时间:2018-08-21 16:33:31

标签: rdlc

我正在用C#编写的程序中创建RDLC报告。它从MySQL服务器获取数据,并将其提供给报告。此数据的一部分是一个字符串,用于存储报表上文本框背景的十六进制值。如果背景色太暗,我需要一个用于文本框前景的表达式来动态更改文本的颜色。我不知道以前报告中的颜色(即基于特定颜色的Switch语句不起作用)

我当时想尝试将字符串的红色绿色和蓝色值分开,并逻辑地说:

IF([红色和蓝色太低]或[红色和绿色太低]或[蓝色和绿色太低]) 然后 (将前景色设置为白色) 其他 (将前景色设置为黑色)

文本颜色的表达式将类似于:

= IIF(Fields!reportColorCode.Value [条件-这是我遇到的地方],“#FFFFFF”,“#000000”)

我们将不胜感激任何帮助,或者有任何疑问来澄清我的工作。

谢谢!

1 个答案:

答案 0 :(得分:0)

我已经弄清楚了我想做的事情,这是我想出的,并不是很有效,但是它解析了十六进制字符串(例如“#EDF32A”),并查看了第二,第四和第六字符,并且如果第二,第四和第六个字符中的两个同时等于1,2,3,4,5,6或7,则颜色足够深,可以将文本更改为白色。

=IIF(
    (
        (
       MID(Fields!reportColorCode.Value, 2, 1) = "0" OR
       MID(Fields!reportColorCode.Value, 2, 1) = "1" OR
       MID(Fields!reportColorCode.Value, 2, 1) = "2" OR
       MID(Fields!reportColorCode.Value, 2, 1) = "3" OR
       MID(Fields!reportColorCode.Value, 2, 1) = "4" OR
       MID(Fields!reportColorCode.Value, 2, 1) = "5" OR
       MID(Fields!reportColorCode.Value, 2, 1) = "6" OR
       MID(Fields!reportColorCode.Value, 2, 1) = "7"
        ) 
        AND 
        (
       MID(Fields!reportColorCode.Value, 4, 1) = "0" OR
       MID(Fields!reportColorCode.Value, 4, 1) = "1" OR
       MID(Fields!reportColorCode.Value, 4, 1) = "2" OR
       MID(Fields!reportColorCode.Value, 4, 1) = "3" OR
       MID(Fields!reportColorCode.Value, 4, 1) = "4" OR
       MID(Fields!reportColorCode.Value, 4, 1) = "5" OR
       MID(Fields!reportColorCode.Value, 4, 1) = "6" OR
       MID(Fields!reportColorCode.Value, 4, 1) = "7"        
        )
    )
    OR
    (
        (
       MID(Fields!reportColorCode.Value, 2, 1) = "0" OR
       MID(Fields!reportColorCode.Value, 2, 1) = "1" OR
       MID(Fields!reportColorCode.Value, 2, 1) = "2" OR
       MID(Fields!reportColorCode.Value, 2, 1) = "3" OR
       MID(Fields!reportColorCode.Value, 2, 1) = "4" OR
       MID(Fields!reportColorCode.Value, 2, 1) = "5" OR
       MID(Fields!reportColorCode.Value, 2, 1) = "6" OR
       MID(Fields!reportColorCode.Value, 2, 1) = "7"
        ) 
        AND 
        (
       MID(Fields!reportColorCode.Value, 6, 1) = "0" OR
       MID(Fields!reportColorCode.Value, 6, 1) = "1" OR
       MID(Fields!reportColorCode.Value, 6, 1) = "2" OR
       MID(Fields!reportColorCode.Value, 6, 1) = "3" OR
       MID(Fields!reportColorCode.Value, 6, 1) = "4" OR
       MID(Fields!reportColorCode.Value, 6, 1) = "5" OR
       MID(Fields!reportColorCode.Value, 6, 1) = "6" OR
       MID(Fields!reportColorCode.Value, 6, 1) = "7"        
        )
    )
    OR
    (
        (
       MID(Fields!reportColorCode.Value, 6, 1) = "0" OR
       MID(Fields!reportColorCode.Value, 6, 1) = "1" OR
       MID(Fields!reportColorCode.Value, 6, 1) = "2" OR
       MID(Fields!reportColorCode.Value, 6, 1) = "3" OR
       MID(Fields!reportColorCode.Value, 6, 1) = "4" OR
       MID(Fields!reportColorCode.Value, 6, 1) = "5" OR
       MID(Fields!reportColorCode.Value, 6, 1) = "6" OR
       MID(Fields!reportColorCode.Value, 6, 1) = "7"        
        ) 
        AND 
        (
       MID(Fields!reportColorCode.Value, 4, 1) = "0" OR
       MID(Fields!reportColorCode.Value, 4, 1) = "1" OR
       MID(Fields!reportColorCode.Value, 4, 1) = "2" OR
       MID(Fields!reportColorCode.Value, 4, 1) = "3" OR
       MID(Fields!reportColorCode.Value, 4, 1) = "4" OR
       MID(Fields!reportColorCode.Value, 4, 1) = "5" OR
       MID(Fields!reportColorCode.Value, 4, 1) = "6" OR
       MID(Fields!reportColorCode.Value, 4, 1) = "7"        
        )
    )
    ,"#FFFFFF", "#000000"
)