Sql server 向SQL Server Reporting services报表添加交替行颜色
如何在SQL Server Reporting Services报表中对交替行进行着色Sql server 向SQL Server Reporting services报表添加交替行颜色,sql-server,reporting-services,formatting,Sql Server,Reporting Services,Formatting,如何在SQL Server Reporting Services报表中对交替行进行着色 编辑:下面列出了一系列好的答案——从和到。唉,我只能选择一个…转到表行的BackgroundColor属性并选择“表达式…” 使用以下表达式: = IIf(RowNumber(Nothing) Mod 2 = 0, "Silver", "Transparent") 此技巧可应用于报告的许多领域 在.NET 3.5+中,您可以使用: = If(RowNumber(Nothing) Mod 2 = 0, "S
编辑:下面列出了一系列好的答案——从和到。唉,我只能选择一个…转到表行的BackgroundColor属性并选择“表达式…” 使用以下表达式:
= IIf(RowNumber(Nothing) Mod 2 = 0, "Silver", "Transparent")
此技巧可应用于报告的许多领域
在.NET 3.5+中,您可以使用:
= If(RowNumber(Nothing) Mod 2 = 0, "Silver", "Transparent")
不寻找代表——我只是自己研究了这个问题,并想与大家分享。在对行进行分组时,使用IIF(RowNumber…)可能会导致一些问题,另一种选择是使用简单的VBScript函数来确定颜色
这是一个多一点的努力,但当基本的解决方案不够时,它是一个很好的选择
基本上,您可以按如下方式向报表中添加代码
Private bOddRow As Boolean
'*************************************************************************
' -- Display green-bar type color banding in detail rows
' -- Call from BackGroundColor property of all detail row textboxes
' -- Set Toggle True for first item, False for others.
'*************************************************************************
Function AlternateColor(ByVal OddColor As String, _
ByVal EvenColor As String, ByVal Toggle As Boolean) As String
If Toggle Then bOddRow = Not bOddRow
If bOddRow Then
Return OddColor
Else
Return EvenColor
End If
End Function
然后在每个单元格上设置背景色,如下所示:
=Code.AlternateColor("AliceBlue", "White", True)
有关组页眉/页脚的完整详细信息,请参见此:
=iif(RunningValue(*group on field*,CountDistinct,"*parent group name*") Mod 2,"White","AliceBlue")
您还可以使用此选项“重置”每个组中的行颜色计数。我希望每个子组中的第一个详细信息行以白色开头,此解决方案(在详细信息行上使用时)允许这种情况发生:
=IIF(RunningValue(Fields![Name].Value, CountDistinct, "NameOfPartnetGroup") Mod 2, "White", "Wheat")
请看:我注意到的一件事是,前两种方法都不知道组中第一行应该是什么颜色;该组将从上一组最后一行的相反颜色开始。我希望我的组总是以相同的颜色开始…每个组的第一行应该总是白色的,下一行应该是彩色的 基本概念是在每个组启动时重置切换,因此我添加了一些代码:
Private bOddRow As Boolean
'*************************************************************************
' -- Display green-bar type color banding in detail rows
' -- Call from BackGroundColor property of all detail row textboxes
' -- Set Toggle True for first item, False for others.
'*************************************************************************
Function AlternateColor(ByVal OddColor As String, _
ByVal EvenColor As String, ByVal Toggle As Boolean) As String
If Toggle Then bOddRow = Not bOddRow
If bOddRow Then
Return OddColor
Else
Return EvenColor
End If
End Function
'
Function RestartColor(ByVal OddColor As String) As String
bOddRow = True
Return OddColor
End Function
Private bOddRow As Boolean
'*************************************************************************
'-- Display green-bar type color banding in detail rows
'-- Call from BackGroundColor property of all detail row textboxes
'-- Set Toggle True for first item, False for others.
'*************************************************************************
'
Function AlternateColor(ByVal OddColor As String, _
ByVal EvenColor As String, ByVal Toggle As Boolean) As String
If Toggle Then bOddRow = Not bOddRow
If bOddRow Then
Return OddColor
Else
Return EvenColor
End If
End Function
'
Function RestartColor(ByVal OddColor As String) As String
bOddRow = True
Return OddColor
End Function
我现在有三种不同的细胞背景:
请随意添加关于如何改进此代码的评论:我对SSRS和VB都是全新的,因此我强烈怀疑有很大的改进空间,但基本想法似乎是合理的(对我很有用)所以我想把它扔到这里。我的问题是我希望一行中的所有列都具有相同的背景。我按行和按列进行分组,在这里,使用最上面的两个解决方案,我得到了列1中所有带彩色背景的行,列2中所有带白色背景的行,列3中所有带彩色背景的行,依此类推。这就好像
RowNumber
和bOddRow
(Catch22的解决方案)注意我的列组,而不是忽略它,只与新行交替
我希望第1行中的所有列都有白色背景,第2行中的所有列都有彩色背景,第3行中的所有列都有白色背景,依此类推。我通过使用所选答案获得了这种效果,但我没有将Nothing
传递给RowNumber
,而是传递了列组的名称,例如
=IIf(RowNumber("MyColumnGroupName") Mod 2 = 0, "AliceBlue", "Transparent")
我认为这可能对其他人有用。如果整个报表需要交替颜色,您可以将Tablix绑定到的数据集用于报表上的报表范围标识行号,并在rownumber函数中使用该数据集
=IIf(RowNumber("DataSet1") Mod 2 = 1, "White","Blue")
迈克尔·哈伦的解决方案对我很有效。然而,我得到一个警告,说“透明”不是一个有效的背景色预览时。从中找到了一个快速修复方法 . 不使用任何内容而不是“透明”
当我使用Catch22的解决方案时,我得到了国际象棋的效果,我想是因为我的矩阵在设计中不止一列。 这句话对我很管用:
=iif(RunningValue(Fields![rowgroupfield].Value.ToString,CountDistinct,Nothing) Mod 2,"Gainsboro", "White")
我改变了@Catch22的解决方案,因为如果我决定改变其中一种颜色,我不喜欢进入每个领域。这在报告中尤其重要,因为报告中有许多字段需要更改颜色变量
'*************************************************************************
' -- Display alternate color banding (defined below) in detail rows
' -- Call from BackgroundColor property of all detail row textboxes
'*************************************************************************
Function AlternateColor(Byval rowNumber as integer) As String
Dim OddColor As String = "Green"
Dim EvenColor As String = "White"
If rowNumber mod 2 = 0 then
Return EvenColor
Else
Return OddColor
End If
End Function
注意,我已经将函数从一个接受颜色的函数更改为一个包含要使用的颜色的函数
然后在每个字段中添加:
=Code.AlternateColor(rownumber(nothing))
这比手动更改每个字段背景色的颜色要可靠得多。有人能解释一下在下面的代码中将其余字段变为false背后的逻辑吗(从上面的帖子)
我注意到的一点是,前两个方法都不知道第一行应该是什么颜色;该组将从上一组最后一行的相反颜色开始。我希望我的组总是以相同的颜色开始…每个组的第一行应该总是白色的,下一行应该是彩色的 基本概念是在每个组启动时重置切换,因此我添加了一些代码:
Private bOddRow As Boolean
'*************************************************************************
' -- Display green-bar type color banding in detail rows
' -- Call from BackGroundColor property of all detail row textboxes
' -- Set Toggle True for first item, False for others.
'*************************************************************************
Function AlternateColor(ByVal OddColor As String, _
ByVal EvenColor As String, ByVal Toggle As Boolean) As String
If Toggle Then bOddRow = Not bOddRow
If bOddRow Then
Return OddColor
Else
Return EvenColor
End If
End Function
'
Function RestartColor(ByVal OddColor As String) As String
bOddRow = True
Return OddColor
End Function
Private bOddRow As Boolean
'*************************************************************************
'-- Display green-bar type color banding in detail rows
'-- Call from BackGroundColor property of all detail row textboxes
'-- Set Toggle True for first item, False for others.
'*************************************************************************
'
Function AlternateColor(ByVal OddColor As String, _
ByVal EvenColor As String, ByVal Toggle As Boolean) As String
If Toggle Then bOddRow = Not bOddRow
If bOddRow Then
Return OddColor
Else
Return EvenColor
End If
End Function
'
Function RestartColor(ByVal OddColor As String) As String
bOddRow = True
Return OddColor
End Function
我现在有三种不同的细胞背景:
Private bOddRow As Boolean
Private cellCount as Integer
Function AlternateColorByColumnCount(ByVal OddColor As String, ByVal EvenColor As String, ByVal ColCount As Integer) As String
if cellCount = ColCount Then
bOddRow = Not bOddRow
cellCount = 0
End if
cellCount = cellCount + 1
if bOddRow Then
Return OddColor
Else
Return EvenColor
End If
End Function
=Code.AlternateColorByColumnCount("LightGrey","White", 7)
= Iif ( RunningValue (Fields!description.Value + Fields!name.Value, CountDistinct, Nothing) Mod 2 = 0,"#e6eed5", "Transparent")
Public Dim BGColor As String = "#ffffff"
Function AlternateColor() As String
If BGColor = "#cccccc" Then
BGColor = "#ffffff"
Return "#cccccc"
Else
BGColor = "#cccccc"
Return "#ffffff"
End If
End Function