我知道您可以将BackgroundColor设置为使用相当简单的表达式在两种颜色之间交替。我有一个列包含按顺序组织的日期值。基本上,我希望每次日期值随着行向下变化时,BackgroundColor都会交替显示。我在那里得到了这段代码:
= iif(上一个(字段!Req_Del_Dt.Value)=(字段!Req_Del_Dt.Value),“白色”,“薰衣草”)
每次行的值与前一行不同时,这将更改颜色。这就是结果:
http://imageshack.us/photo/my-images/24/alternatingcolors.jpg/
如何在整个日期(可能是3行)中将颜色更改为一种颜色,然后在下一次更改日期时“切换”为不同的颜色?我认为我走在正确的轨道上,但我无法想出这一点。
我非常感谢任何建议或意见。谢谢!
答案 0 :(得分:7)
=IIF(RunningValue(Fields!Address.Value, CountDistinct, Nothing) MOD 2 = 1, "White", "Lavender")
对我而言,这就是诀窍。
答案 1 :(得分:1)
您可以编写自定义代码。例如:
Private _dateCount As Integer = 0
Function GetDateRowColor(ByVal previousDate As DateTime, ByVal currentDate As DateTime) As String
If previousDate = currentDate Then
' Do nothing
Else
_dateCount++
End If
If _dateCount Mod 2 = 0 Then
Return "White"
Else
Return "Lavender"
End If
End Function
然后,在背景颜色中使用表达式,例如:
=Code.GetDateRowColor(Previous(Fields!Req_Del_Dt.Value), Fields!Req_Del_Dt.Value)
HTH。
答案 2 :(得分:1)
知道了 - 在回复之前我应该更加努力。我必须跟踪当前行号并仅在新行上切换值。修改后的代码:
Private _dateCount As Integer = 0
Private CurRowNumber as Integer = 0
Private ColorValue as String = ""
Function GetDateRowColor(ByVal previousDate As DateTime, ByVal currentDate As DateTime, MyRowNumber as Integer) As String
'Check if this is a new row number...
If MyRowNumber <> CurRowNumber then
CurRowNumber = CurRowNumber + 1 'New row, so increment counter
If previousDate = currentDate Then
' Do nothing
Else
_dateCount = _dateCount + 1
End If
If _dateCount Mod 2 = 0 Then
ColorValue = "White"
Else
ColorValue = "Lavender"
End If
End If
Return ColorValue 'Always return a value (for columns other than the first one)
End Function
这样称呼:
=Code.GetDateRowColor(Previous(Fields!Req_Del_Dt.Value), Fields!Req_Del_Dt.Value, RowNumber(Nothing))
再次感谢,感谢您的出色回应&amp;解答!
答案 3 :(得分:1)
我遇到了类似的问题:
对我而言,Loki70 revised answer中的代码无效。几行随机块的第一行将在单元格中具有交替的颜色。但是,一旦我重写了代码,它就起作用了:
Private _dateCount As Integer = 0
Private RowNumberRunner as Integer = 0
Private ColorValue as String = ""
Function GetDateRowColor(ByVal previousDate As DateTime, ByVal currentDate As DateTime, MyRowNumber as Integer) As String
If MyRowNumber <> RowNumberRunner Then
RowNumberRunner = MyRowNumber
If previousDate <> currentDate Then
_dateCount = _dateCount + 1
End If
End If
If _dateCount Mod 2 = 1 Then
ColorValue = "White"
Else ColorValue = "Lavender"
End If
Return ColorValue
End Function
没有任何线索,为什么这样做,以前的代码没有。它的功能相同,只是用不同的方式写成。它的调用方式相同:
=Code.GetDateRowColor(Previous(Fields!Req_Del_Dt.Value), Fields!Req_Del_Dt.Value, RowNumber(Nothing))
答案 4 :(得分:0)
我遇到了与Loki70相同的问题,并且非常喜欢Nanu的解决方案。
然而,一旦我看到结果,我想做更多。我希望主要信息出现一次,但在组的第一行之后“隐藏”行。一起使用Nanu和Loki70的代码,我能够将第一行之后的行的字体颜色设置为与填充相同的颜色。从而隐藏该单元格的文本。
=IIF(Previous(Fields!Req_Del_Dt.Value) <> (Fields!Req_Del_Dt.Value), "Black",
IIF(RunningValue(Fields!Req_Del_Dt.Value, CountDistinct, Nothing) MOD 2 = 1,
"White", "Lavender"))
我用它来隐藏显示相同信息的行的前几个单元格,然后显示该子组不同的其他单元格。
答案 5 :(得分:-1)
Public Function Setcolor(ByVal Runs AS Integer,ByVal Wickets AS Integer) AS String
setcolor="Transperent"
IF(Runs >=500 AND Wickets >=10) THEN return "Green"
END IF
END Function
答案 6 :(得分:-1)
这是一个简单的解决方案。首先,我假设您正在使用MSSQL,因为问题是关于SSRS。您可以直接从查询中选择值,因此在报表本身中,您只需根据单个值设置背景颜色,而不是范围......
让我们说,您希望在报告Req_Del_Dt.Value
中使用不同的颜色,根据它的范围....所以,您可以查询类似这样的内容&gt;
select *,
case when Req_Del_Dt < 30 then 1
when Req_Del_Dt between 30 and 60 then 2
when Req_Del_Dt between 61 and 90 then 3
when Req_Del_Dt between 91 and 150 then 4
else 5 end as color_range
from source_table
有了这个,在SSRS中,您只需转到BackgroundColor属性,在文本框的Fill部分中显示req_del_det
,选择颜色表达式,并写下这样的&gt;
=SWITCH(Fields!color_range.Value = 1, "#ffffff",
Fields!color_range.Value = 2, "#ffebeb",
Fields!color_range.Value = 3, "#ffd8d8",
Fields!color_range.Value = 4, "#ffc4c4",
Fields!color_range.Value = 5, "#ffb1b1")