'---生成图表
Dim Chart As WinForm.Chart '定义一个图表变量
Dim Series As WinForm.ChartSeries '定义一个图系变量
Dim tbn As String = "发货产品统计"
Dim t As Table = Tables(tbn) '定义一个变量t引用数据表
Chart = Forms(tbn).Controls("Chart1") ' 引用窗口中的图表
Chart.ChartType = ChartTypeEnum.Bar '图表类型
Chart.ChartType2 = ChartTypeEnum.Bar '图表2类型
'Chart.DataSource = tbn '设置绑定表
Dim Xi As Integer
Dim dts As List(Of String) '数组集合
dts = DataTables(tbn).GetValues("年",t.Filter)
Xi = dts.Count
'A---根据表中的分组行数计算图表的X轴点数及图表长度-----
Chart.AxisX.Min = 0 '指定坐标轴的最大最小值
If Xi < 20 Then
Chart.AxisX.Max = 40 + 1 '指定X轴的最大值
Chart.Width = 600 '图表默认宽度
Else '上面默认宽度/点数600/40=15
Chart.AxisX.Max = Xi*2 + 1 '指定X轴的最大值
If Xi * 25 < 600 Then
Chart.Width = 600 '图表默认宽度
Else
Chart.Width = Xi*25
End If
End If
'A-----------------------------------------------------
'---根据条件计算数量及金额最大值
Dim flt As String
Dim max1,max2 As Double
flt = "序号 = '" & Tables(tbn).Current("序号") & "'"
max1 = Tables(tbn).Compute("Max(数量)",flt)
max1 = math.Ceiling(max1*1.1)
max2 = Tables(tbn).Compute("Max(金额)",flt)
max2 = math.Ceiling(max2*1.1)
Chart.SeriesList.Clear() '清除图表原来的图系
Chart.Axisx.ClearValueLabel '清除设置的数值字符标示
Series = Chart.SeriesList.Add() '增加第一个图系
Series.Length = Xi*2 + 1 '图系点数(*2是为了错开显示,即1,3显示数量,2,4显示金额)
Series.Text = "数量" '指定图例名称
'Series.Y.DataField = "数量"
Series.FillColor = Color.SkyBlue
Chart.AxisY.Text = "数量"
Chart.AxisY.Min = 0 '指定Y轴的最小值
Chart.AxisY.Max = max1 '指定Y轴的最大值
'Chart.AxisX.Major = 1 '主刻度间隔值为5000
'Chart.BarClusterWidth = 40
Chart.AxisX.MinorTick = False '不显示副刻度
'2---根据是否有筛选条件生成图表-------------------------
If flt > "" Then
Series.X(0) = 0 '指定水平坐标
Series.y(0) = 0 '指定水平坐标
For i As Integer = 1 To Xi*2 - 1 Step 2 '逐个序号设置坐标
Series.X(i) = i '指定水平坐标
'---查找表中当前行的Y轴对应值
Dim r As DataRow = DataTables(tbn).Find(flt & " And 年 = " & dts((i-1)/2)) '找出对应周期的行
If r IsNot Nothing Then '如果找到对应年月的行
Series.Y(i) = r("数量") '指定数量作为垂直坐标
Chart.AxisX.SetValueLabel(i,dts((i-1)/2)) '指定字符表示
Else
Series.Y(i) = 0
End If
Next
End If
'2-----------------------------------------------------------------
Chart.SeriesList2.Clear() '清除图表原来的图系
Series = Chart.SeriesList2.Add() '增加第二个图系
Series.Length = Xi*2 + 1 '图系点数(*2是为了错开显示,即1,3显示数量,2,4显示金额)
Series.Text = "金额" '指定图例名称
'Series.Y.DataField = "金额"
Series.FillColor = Color.Orange
Chart.AxisY2.Text = "金额"
Chart.AxisY2.Min = 0 '指定Y轴的最小值
Chart.AxisY2.Max = max2 '指定Y轴的最大值
Chart.LegendVisible = True '显示图列
'Chart.BarClusterWidth2 = 40
'2---根据是否有筛选条件生成图表-------------------------
If flt > "" Then
Series.X(0) = 0 '指定水平坐标
Series.y(0) = 0 '指定水平坐标
For i As Integer = 2 To Xi*2 Step 2 '逐个序号设置坐标
Series.X(i) = i '指定水平坐标
'---查找表中当前行的Y轴对应值
Dim r As DataRow = DataTables(tbn).Find(flt & " And 年 = " & dts((i-1)/2-0.5)) '找出对应周期的行
If r IsNot Nothing Then '如果找到对应年月的行
Series.Y(i) = r("金额") '指定数量作为垂直坐标
Else
Series.Y(i) = 0
End If
Next
End If
'2---------------------------------------------------------
Chart.AxisX.AnnoWithLabels = True '启用字符标示
Chart.AxisX.AnnoRotation = - 45
Chart.VisualEffect = True '加上这一行,让你的图表更漂亮
Chart.LegendVisible = True '显示图列
Chart.LegendCompass= CompassEnum.North '图列显示在南方(底端)