我有一个饼图和条形图,用于显示一些数据。我想将图表中的颜色映射到特定颜色的部门。 代码运行时没有错误,但颜色并不总是映射到同一个部门。
此功能位于“代码”部分的报告正文中:
Private mapping As New System.Collections.Hashtable()
Private colorPalette As String() = {"#5badff", "#8c001a", "#a33247", "#ba6675", "#d199a3", "#e8ccd1"}
Private boardNames As String() = {"Dept1", "Dept2", "App", "IT", "Delivery", "Development"}
Public Function SetColorsToBoard()
Dim count As Integer = 0
Dim name As String = ""
IF colorPalette.Length = boardNames.Length Then
For Each name in boardNames
mapping.Add(name, colorPalette(count))
count = count + 1
Next
End If
End Function
Public Function GetColor(ByVal groupingValue As String) As String
If mapping.ContainsKey(groupingValue) Then
Return mapping(groupingValue)
End If
Call SetColorsToBoard
End Function
如果有Dept1的数据,颜色将按预期显示。当我选择不同的公司而他们在查询中没有Dept1时,Dept2被设置为第一种颜色。 当我尝试编写函数时,它不依赖于数据。
GetColor
函数在每个图表的颜色部分中作为表达式调用。
为什么映射依赖于查询返回的数据?
更新 我发现我的条形图是堆叠的。当我只有1个部门。在图表中,第一个栏是“蓝色”,这是第一个颜色。第二个酒吧是勃艮第,这是第二种颜色。部门是系列分组。在此图表中只有2个部门。当有2个部门时,颜色是正确的。
答案 0 :(得分:0)
我明白了......
我需要在调用之后添加return mapping(groupingValue)
来设置映射。
这是GetColor
函数:
Public Function GetColor(ByVal groupingValue As String) As String
If mapping.ContainsKey(groupingValue) Then
Return mapping(groupingValue)
End If
Call SetColorsToBoard
Return mapping(groupingValue)
End Function