几个示例
根据常见的数据获取方式,我们提供了几个单元格图表示例。
本节内容可以参考CaseStudy目录下的文件:单元格图表.Table
示例一
假定有下图所示的表,第一列包括了一些用逗号分割的趋势数据:
在DrawCell事件写入代码:
If
e.Col.Name
= "第二列"
Then
e.Chart.AddValues(e.Row("第一列").Split(","))
e.Chart.Space
= 2
'设置图表边距
e.Chart.SeriesColor
= Color.Gray
'设置线条颜色
e.Chart.ShowHigh
= True
'标记最大值
e.Chart.HighMarkerColor
= Color.Red
'设置最大值标记颜色
e.Chart.ShowLow=
True
'标记最小值
e.Chart.LowMarkerColor
= Color.Green
'设置最小值标记颜色
e.DrawChart()
End
If
得到的图表为:
提示:
1、第二列只是用于绘制图表,不存储实际数据,所以应该使用表达式列。
2、需要的话,你也可以合并数据列和图表列,直接在第一列生成图表,此时并不影响数据编辑,你双击单元格可以依然可以编辑第一列的数据。
示例二
假定有下图所示的一个表,希望在走势列显示每个月完成的任务:
代码很简单,只需将DrawCell事件代码设置为:
If
e.Col.Name
= "走势" Then
Dim cns()
As String = {"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"}
For
Each cn
As String
In cns
e.Chart.AddValues(e.Row(cn))
Next
e.Chart.ChartType
= 1
'使用柱状图
e.Chart.SeriesColor
= Color.CadetBlue
'设置图表颜色
e.DrawChart()
End
If
如果你想在单元格图表中显示一条标志线,用于标记平均值,可以将代码更改为:
If
e.Col.Name
= "走势" Then
Dim cns()
As String = {"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"}
Dim
sum As
Double
For Each
cn As
String In
cns
e.Chart.AddValues(e.Row(cn))
sum = sum
+ e.Row(cn)
Next
e.Chart.ChartType
= 1 '使用柱状图
e.Chart.SeriesColor
= Color.CadetBlue
'设置图表颜色
e.Chart.MarkerLineValue
= sum / e.Chart.Values.Count
'设置标志值
e.Chart.MarkerLineColor
= Color.Red
'设置标志线颜色
e.DrawChart()
End
If
得到的图表如下,可以很直观地知道哪些值超出平均值,哪些值低于平均值,如果需要你可以标出最大值和最小值:
示例三
下图的项目表和进度表是父子关系,已经根据项目列建立了关联。
项目表目标列的值,是该项目要完成的总量目标。
进度表按月输入该项目每月完成的数量。
现在希望在项目表中用柱状图显示每月累计完成的任务量,并用第一个图柱表述目标值,且要求:
1、如果没有完成目标,则目标值为红色。
2、如果已经完成目标,则目标值为绿色
2、如果已经完成目标任务的90%,则目标值为黄色:
似乎有些复杂,其实利用我们现有的知识,完全可以轻松写出代码,在项目表的DrawCell事假写入如下代码即可:
If
e.Col.Name
= "完成进度" Then
Dim crs
As List(of
DataRow) = e.Row.DataRow.GetChildRows("进度")
Dim mb
As Double =
e.Row("目标")
'获取目标值
e.Chart.AddValues(mb)
'向图表增加目标值
Dim sum
As Double
'用于累加完成量
For Each
cr As
DataRow In
crs '添加图表数据
sum
= sum + cr("完成量")
e.Chart.AddValues(sum)
Next
e.Chart.ShowFirst
= True '标记第一个值,也就是目标值
e.Chart.FirstMarkerColor
= Color.Green
e.Chart.StartingValue
= 0 '将起始值设置为0,使得图柱高度和实际进度相符
If sum >=
mb Then
'如果已经完成任务,目标值用绿色表示
e.Chart.FirstMarkerColor
= Color.Green
ElseIf sum
>= mb * 0.9
'如果已经完成任务的90%,目标值用黄色表示
e.Chart.FirstMarkerColor
= Color.Gold
Else
'如果完成任务没有达到90%,则用红色表示
e.Chart.FirstMarkerColor
= Color.Red
End
If
e.Chart.ChartType
= 1 '使用柱状图
e.DrawChart()
End
If
重要提示:
设置好代码之后,你在进度表修改数据,会发现项目表的图表并不会自动重绘,解决的办法是将完成进度列改为表达式列,并将其表达式设置为:Sum(Child(项目进度).完成量)。
这样在子表修改完成量,父表完成进度列的数据会自动刷新,从而重新绘制图表。