首页 > 解决方案 > 按列中的数字交替行颜色

问题描述

我有一列包含确定工作和后缀的数字:

例子:

|Jobnumber|Suffix| 
  x001       1 - white
  x001       2 - grey
  x001       2 - grey
  x001       3 - white
  x002       1  <---- where it would break the alternating color, Should be grey!
  x002       1 - should be grey
  x002       1 - should be grey
  x002       2 - should be white
  x002       2 - should be white
  x003       1 - should be grey

我将报告设置为接受一个范围Jobnumbers和一个范围,Suffixes因此每个范围Jobnumber都有一组按升序排列的后缀。我的表达式代码Suffix按颜色按不同的数字交替显示,但在下一个时它会中断,Jobnumber并且Suffix在报告中是下一个。

当下一组出现在报告中时Jobnumbers,如何让行仍然按颜色交替?Suffixes

标签: reporting-services

解决方案


如果您希望交替行颜色忽略作业编号和后缀,则将表达式基于 ROWNUMBER 而不是后缀。

例如=IIF(ROWNUMBER(Nothing) MOD 2, "LightBlue", Nothing)

更新:基于修订的问题

可能有一种更优雅的方式来做到这一点,但以下应该可行。

首先要做的是转到报表属性并将两个报表变量添加到您的报表中。加上和AltBackColour的值。关闭只读复选框 1LastRownumber-1在此处输入图像描述

接下来,单击代码选项卡添加以下功能。

Public Function BackColour (ByVal cuRowNumber AS Integer, ByVal lastJobNumber AS String, ByVal curJobNumber AS String, ByVal lastSuffix AS Integer, ByVal curSuffix AS Integer) as Integer
' Check if EITHER the job or suffix have changed, if so, switch the backcolour flag and update the report variable.

Dim switch as boolean
switch = ((lastJobNumber <> curJobNumber) or (lastSuffix <> curSuffix)) and cuRowNumber <> Report.Variables!LastRowNumber.Value

If Switch = true THEN 
    IF Report.Variables!AltBackColour.Value = 0 THEN 
        Report.Variables!AltBackColour.Value = 1 
    ELSE Report.Variables!AltBackColour.Value = 0
    END IF
End if

Report.Variables!LastRowNumber.Value = cuRowNumber

BackColour = Report.Variables!AltBackColour.Value 

End Function

最后,将BackgroundColor行的属性设置为以下表达式。

=IIF(
    Code.BackColour(
                    RowNumber(Nothing)
                    , Previous(Fields!JobNumber.Value)
                    , Fields!JobNumber.Value
                    , Previous(Fields!Suffix.Value)
                    , Fields!Suffix.Value
                    ) = 0
    , Nothing
    , "LightGreen"
    )

我用你的样本数据做了这个,得到了以下结果。

在此处输入图像描述

基本上,代码会检查后缀的工作是否已更改,并在 1 和 0 之间切换标志以指示要使用的颜色。它还检查我们没有检查与以前相同的行。我们这样做是因为即使我们设置了行的背景颜色属性,实际发生的情况是每个单元格获取的是背景颜色属性集,这意味着为每个单元格调用代码并将继续翻转标志。通过检查该行是否已更改,我们可以解决这个问题。


推荐阅读