将交替的行颜色添加到SQL Server报表服务报表中

时间:2020-03-05 18:47:48  来源:igfitidea点击:

如何在SQL Server Reporting Services报表中为交替的行加阴影?

编辑:下面列出了许多很好的答案-从快速,简单到复杂而全面。 las,我只能选择一个...

解决方案

回答

转到表行的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

然后在每个单元格上,如下设置BackgroundColor:

=Code.AlternateColor("AliceBlue", "White", True)

有关此Wrox文章的完整详细信息

回答

对于组页眉/页脚:

=iif(RunningValue(*group on field*,CountDistinct,"*parent group name*") Mod 2,"White","AliceBlue")

我们还可以使用它来重置每个组中的行颜色计数。我希望每个子组中的第一个详细信息行都以怀特开头,并且此解决方案(在详细信息行中使用时)允许发生这种情况:

=IIF(RunningValue(Fields![Name].Value, CountDistinct, "NameOfPartnetGroup") Mod 2, "White", "Wheat")

请参阅:http://msdn.microsoft.com/en-us/library/ms159136(v = sql.100).aspx

回答

我注意到的一件事是,前两种方法都不了解第一行应在组中是什么颜色。该组将从与上一组的最后一行相反的颜色开始。我希望我的组始终以相同的颜色开始...每个组的第一行应始终为白色,而下一行应为彩色。

基本概念是在每个组开始时重置切换,因此我添加了一些代码:

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

所以我现在有三种不同的细胞背景:

  • 数据行的第一列具有= Code.AlternateColor(" AliceBlue"," White",True)(与上一个答案相同。)
  • 数据行的其余列具有= Code.AlternateColor(" AliceBlue"," White",False)(这也与先前的答案相同。)
  • 分组行的第一列具有= Code.RestartColor(" AliceBlue")(这是新的。)
  • 分组行的其余列具有= Code.AlternateColor(" AliceBlue"," White",False)(以前使用过,但未在分组行中提及。)

这对我有用。如果我们希望分组行是无色或者不同的颜色,那么如何更改分组行应该很明显。

请随时添加有关如何改进此代码的注释:我对SSRS和VB都是陌生的,因此我强烈怀疑仍有很大的改进空间,但是基本思路似乎是合理的(而且很有用)对我来说),所以我想把它扔在这里。

回答

我的问题是我希望连续的所有列都具有相同的背景。我按行和按列进行分组,在这里使用前两个解决方案,使第1列中的所有行都有彩色背景,第2列中的所有行都有白色背景,第3列中的所有行都带有彩色背景, 等等。好像(Catch22解决方案的)" RowNumber"和" bOddRow"关注我的列组,而不是忽略它并仅与新行交替。

我想要的是使第1行中的所有列具有白色背景,然后使第2行中的所有列具有彩色背景,然后使第3行中的所有列具有白色背景,依此类推。我通过使用选定的答案获得了这种效果,但没有传递NothingRowNumber,而是传递了列组的名称,例如

=IIf(RowNumber("MyColumnGroupName") Mod 2 = 0, "AliceBlue", "Transparent")

认为这对其他人可能有用。

回答

如果整个报告都需要交替显示颜色,则可以使用Tablix绑定到的数据集作为报告上报告范围的标识行号,并在RowNumber函数中使用它

=IIf(RowNumber("DataSet1")  Mod 2 = 1, "White","Blue")