如何跨多个形状图指定一致的颜色 (Report Builder 2.0)

在非形状图中,根据图表中各序列的索引来从调色板选择新颜色。例如,图表中的第一个序列将映射到调色板中的第一个颜色。但是,对于形状图,该行为则不相同。在形状图中,调色板中的每个颜色都映射到数据集中的数据点。例如,数据点 1 映射到调色板中的第一个颜色,数据点 2 映射调色板中的第二个颜色,依此类推。

如果数据点没有值,该数据点则不显示在形状图中。这表示显示颜色时将跳过此数据点。例如,如果点 2 的值为零,点 1 将映射到调色板中的第一个颜色,点 3 将映射到调色板中的第二个颜色。上述方法非常有用,因为除非在必要情况下,否则当不需要绘制饼图数据集中的空点时,空点不会使用调色板颜色。

其副作用是,当在报表中显示多个饼图时,饼图可能会对具有相同类别分组的数据点显示不同的颜色。若要解决该问题,您将需要定义映射到类别组而不是各数据值的每一种颜色。

图例与序列相连,因此为序列指定的任何颜色将自动在图例上显示。

跨多个形状图指定一致的颜色

  1. 右键单击表体外部区域,然后选择**“报表属性”**。

  2. 在**“代码”**中,将以下代码键入到文本框中。

        Private colorPalette As String() = {"Color1", "Color2", "Color3"}
        Private count As Integer = 0
        Private mapping As New System.Collections.Hashtable()
        Public Function GetColor(ByVal groupingValue As String) As String
            If mapping.ContainsKey(groupingValue) Then
                Return mapping(groupingValue)
            End If
            Dim c As String = colorPalette(count Mod colorPalette.Length)
            count = count + 1
            mapping.Add(groupingValue, c)
            Return c
        End Function
    
    注意注意

    您需要用您自己的颜色替换“Color1”。可以使用命名颜色,例如“Red”,也可以使用表示颜色的六位十六进制值,例如用“#FFFFFF”表示黑色。如果已定义三种以上的颜色,则需要扩展颜色数组,以使数组中的颜色数与形状图中的点数匹配。通过指定包含命名颜色或颜色的十六进制表示形式、且以逗号分隔的字符串值列表,可以向数组添加新的颜色。

  3. 单击“确定”。

  4. 右键单击形状图并选择**“序列属性”**。

  5. 在**“填充”中,单击表达式** (fx) 按钮可以编辑**“颜色”**属性的表达式。

  6. 键入以下表达式,其中“MyCategoryField”是在类别放置区中显示的字段:

    =Code.GetColor(Fields!MyCategoryField)