几个示例

根据常见的数据获取方式,我们提供了几个单元格图表示例。

本节内容可以参考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(项目进度).完成量)。

这样在子表修改完成量,父表完成进度列的数据会自动刷新,从而重新绘制图表。


本页地址:http://www.foxtable.com/webhelp/topics/3746.htm