以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]图表问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=189065)

--  作者:Xmihu
--  发布时间:2023/11/8 14:45:00
--  [求助]图表问题

图片点击可在新窗口打开查看此主题相关图片如下:1699425513390.png
图片点击可在新窗口打开查看

窗口的afterload 事件:
\'-----------------------生成库存图表-------------------------------
Dim Chart As WinForm.Chart \'定义一个图表变量
Dim Series As WinForm.ChartSeries \'定义一个图系变量
Dim t As Table = Tables("资材信息表") \'定义一个变量t引用数据表
Chart = e.Form.Controls("库存统计") \' 引用窗口中的图表
Chart.ChartType = ChartTypeEnum.Bar \'图表类型改为Bar(条形)
Chart.DataSource = "资材信息表" \'设置绑定表
Chart.SeriesList.Clear() \'清除图表原来的图系
For Each c As Col In t.Cols
    If c.Name = "备件分类" Then
        Series = Chart.SeriesList.Add() \'增加一个图系
        Series.Text = c.Name \'设置图系的标题
        Series.X.DataField = "备件分类" \'X轴绑定到产品列
        Series.Y.DataField = "金额" \'设置Y轴的绑定列
    End If
Next
Chart.VisualEffect = True \'加上这一行,让你的图表更漂亮
Chart.LegendVisible = True \'显示图列
Chart.LegendCompass = CompassEnum.South \'图列显示在南方(底端)

\'-----------------------生成库别图表-------------------------------
Dim Chart1 As WinForm.Chart \'定义一个图表变量
Dim Series2 As WinForm.ChartSeries \'定义一个图系变量
Dim t2 As Table = Tables("资材信息表") \'定义一个变量t引用数据表
Chart1 = e.Form.Controls("库别统计") \' 引用窗口中的图表
Chart1.ChartType = ChartTypeEnum.Bar \'图表类型改为Bar(条形)
Chart1.DataSource = "资材信息表" \'设置绑定表
Chart1.SeriesList.Clear() \'清除图表原来的图系
For Each c As Col In t2.Cols
    If c.Name = "库别" Then
        Series2 = Chart1.SeriesList.Add() \'增加一个图系
        Series2.Text = c.Name \'设置图系的标题
        Series2.X.DataField = "库别" \'X轴绑定到产品列
        Series2.Y.DataField = "金额" \'设置Y轴的绑定列
    End If
Next
Chart1.VisualEffect = True \'加上这一行,让你的图表更漂亮
Chart1.LegendVisible = True \'显示图列
Chart1.LegendCompass = CompassEnum.South \'图列显示在南方(底端)


问题:此时X轴显示的是每条数据,需要显示A\\B\\C类共5类,即显示每类求和后的值,图表1、2同样问题。另图表是否能实现与上表筛选后的数据,同步更新(中间的总信息不变)
[此贴子已经被作者于2023/11/8 14:49:50编辑过]

--  作者:有点蓝
--  发布时间:2023/11/8 15:02:00
--  
\'-----------------------生成库存图表-------------------------------
Dim Chart As WinForm.Chart \'定义一个图表变量
Dim Series As WinForm.ChartSeries \'定义一个图系变量
Dim t As Table = Tables("资材信息表") \'定义一个变量t引用数据表
Chart = e.Form.Controls("库存统计") \' 引用窗口中的图表
Chart.ChartType = ChartTypeEnum.Bar \'图表类型改为Bar(条形)
Chart.SeriesList.Clear() \'清除图表原来的图系
Chart.AxisX.ClearValueLabel
dim ps() as string = t.datatable.getvalues("备件分类",t.filter)
Series.Length = ps.length \'设置图系的长度
For
 i As integer = 0 to ps.length - 1 \'指定每个数据点的位置
    Series.X(i) = i 
\'指定水平坐标
    Series.Y(i) = 
t.datatable.compute("sum(数量)",IIF(t.filter > "",t.filter & " and ","") & "
备件分类 = \'" & ps(i) & "\'"\'指定垂直坐标
    Chart.AxisX.SetValueLabel(i, ps(i)\'指定字符表示
Next
Chart.AxisX.AnnoWithLabels = 
True \'启用字符标示
[此贴子已经被作者于2023/11/8 15:02:41编辑过]

--  作者:Xmihu
--  发布时间:2023/11/8 15:21:00
--  
报错:无法将类型为“System.Collections.Generic.List`1[System.String]”的对象强制转换为类型“System.String[]”  图片点击可在新窗口打开查看
--  作者:有点蓝
--  发布时间:2023/11/8 15:32:00
--  
dim ps() as string = t.datatable.getvalues("备件分类",t.filter)
Series.Length = ps.length \'设置图系的长度
For
 i As integer = 0 to ps.length - 1 \'指定每个数据点的位置

改为
dim ps as List(of string) = t.datatable.getvalues("备件分类",t.filter)
Series.Length = ps.count \'设置图系的长度
For
 i As integer = 0 to ps.count  - 1 \'指定每个数据点的位置

--  作者:Xmihu
--  发布时间:2023/11/8 15:51:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:1699429067916.png
图片点击可在新窗口打开查看
还是报错啊,是不是应该传原件图片点击可在新窗口打开查看
--  作者:有点蓝
--  发布时间:2023/11/8 15:58:00
--  
调试技巧:http://www.foxtable.com/webhelp/scr/1485.htm,看哪一句代码出错
--  作者:Xmihu
--  发布时间:2023/11/8 16:29:00
--  
\'-----------------------生成库存图表-------------------------------
Dim Chart As WinForm.Chart \'定义一个图表变量
Dim Series As WinForm.ChartSeries \'定义一个图系变量
Dim t As Table = Tables("资材信息表") \'定义一个变量t引用数据表
Chart = e.Form.Controls("库存统计") \' 引用窗口中的图表
Chart.ChartType = ChartTypeEnum.Bar \'图表类型改为Bar(条形)
Chart.SeriesList.Clear() \'清除图表原来的图系
Chart.AxisX.ClearValueLabel
MessageBox.Show(1)
Dim ps As List(Of String) = t.DataTable.getvalues("备件分类", t.filter)
MessageBox.Show(2)
Series.Length = ps.count \'设置图系的长度
MessageBox.Show(3)
For i As Integer = 0 To ps.count - 1 \'指定每个数据点的位置
    Series.X(i) = i \'指定水平坐标
    Series.Y(i) = t.DataTable.compute("sum(金额)", IIf(t.filter > "", t.filter & " and ", "") & "备件分类 = \'" & ps(i) & "\'") \'指定垂直坐标
    Chart.AxisX.SetValueLabel(i, ps(i)) \'指定字符表示
Next
MessageBox.Show(4)
Chart.AxisX.AnnoWithLabels = True \'启用字符标示

显示1、2后报错


--  作者:有点蓝
--  发布时间:2023/11/8 16:39:00
--  
Chart.ChartType = ChartTypeEnum.Bar \'图表类型改为Bar(条形)
Chart.SeriesList.Clear() \'清除图表原来的图系
Chart.AxisX.ClearValueLabel
MessageBox.Show(1)
Dim ps As List(Of String) = t.DataTable.getvalues("备件分类", t.filter)
MessageBox.Show(2)
Series = Chart.SeriesList.Add()
Series.Length = ps.count \'设置图系的长度
MessageBox.Show(3)
For i As Integer = 0 To ps.count - 1 \'指定每个数据点的位置
    Series.X(i) = i \'指定水平坐标
    Series.Y(i) = t.DataTable.compute("sum(金额)", IIf(t.filter > "", t.filter & " and ", "") & "备件分类 = \'" & ps(i) & "\'") \'指定垂直坐标
    Chart.AxisX.SetValueLabel(i, ps(i)) \'指定字符表示
Next
MessageBox.Show(4)
Chart.AxisX.AnnoWithLabels = True \'启用字符标示

--  作者:Xmihu
--  发布时间:2023/11/8 19:59:00
--  
图片点击可在新窗口打开查看多谢~,解决了