以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  还是图表的BUG  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=135416)

--  作者:rjh4078
--  发布时间:2019/5/26 0:39:00
--  还是图表的BUG


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

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

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


这两天研究图表 发现很多问题

我还是在一个窗口页面里使用一个chart
通过按钮来渲染chart内容

现在发现一个问题
在button1 中生成一个以日为X轴的图表 1-31
在button2 中生成一个i为X轴的图表 i的值在1-10

如果先按button1 chart第一次正常 再按button2  chart的X轴间隔就缩的非常小 跟button2的内容不匹配
如果先按button2 chart正常 再按button1 正常 再按button2 又跟第一次操作一样 图表变样

button1代码:
Dim sql As String
sql="“
Dim cmd As new SQLCommand
cmd.ConnectionName=Functions.Execute("返回数据源")
cmd.CommandText=sql
Dim dt As DataTable
dt=cmd.ExecuteReader
Dim s As String="个人销售统计"
Dim g As New GroupTableBuilder(s, dt)
g.Groups.AddDef("个人")
g.Totals.AddDef("金额")
g.Build()
Tables(s).Sort="金额 desc "
Dim Chart As  WinForm.Chart \'定义一个图表变量
Dim Series As  WinForm.ChartSeries \'定义一个图系变量
Dim t As Table = Tables(s) \'定义一个变量t引用数据表
Chart= e.Form.Controls("Chart2") \' 引用窗口中的图表
Dim c1Chart1 = Chart.basecontrol
Dim lbls = c1Chart1.ChartLabels
lbls.LabelsCollection.Clear()
Chart.AxisX.ClearValueLabel()
Chart.AxisY.ClearValueLabel()
Chart.ChartType = ChartTypeEnum.bar \'图表1类型改为Bar(条形)
Chart.SeriesList.Clear
Chart.SeriesList2.Clear
Chart.Axisx.Text=""

Series = Chart.SeriesList.Add()
Chart.Axisx.AnnoWithLabels = True
Dim lst As List(of DataRow)=DataTables(s).Select("金额>=0","金额 desc")
\'\'新增图系包括10个数据点
Series.Length = lst.count
For i As Integer = 0 To lst.count-1 \'指定每个数据点的位置
    Series.X(i) = i \'指定水平坐标
    Series.Y(i) = math.round(lst(i)("金额")/10000,2 )\'垂直坐标用随机数生成
    Chart.Axisx.SetValueLabel(i, lst(i)("个人"))
    series.TooltipText="{#YVAL}"
Next

button2 代码


Dim sql As String
sql="”
Dim cmd As new SQLCommand
cmd.ConnectionName=Functions.Execute("返回数据源")
cmd.CommandText=sql
Dim dt As DataTable
dt=cmd.ExecuteReader
Dim s As String="月销售统计"
Dim g As New GroupTableBuilder(s, dt)
g.Groups.AddDef("制单日期", "月")
g.Groups.AddDef("制单日期", DateGroupEnum.Day, "日")
g.Totals.AddDef("金额")
g.Build()
Tables(s).Sort="金额 desc "
Dim Chart As  WinForm.Chart \'定义一个图表变量
Dim Series As  WinForm.ChartSeries \'定义一个图系变量
Dim t As Table = Tables(s) \'定义一个变量t引用数据表
Chart= e.Form.Controls("Chart2") \' 引用窗口中的图表
Dim c1Chart1 = Chart.basecontrol
Dim lbls = c1Chart1.ChartLabels
lbls.LabelsCollection.Clear()
Chart.AxisX.ClearValueLabel()
Chart.AxisY.ClearValueLabel()
Chart.ChartType = ChartTypeEnum.bar \'图表1类型改为Bar(条形)
Chart.SeriesList.Clear
Chart.SeriesList2.Clear
Chart.Axisx.Text=""
Chart.AxisX.AnnoWithLabels = False
Series = Chart.SeriesList.Add()
Series.Length = 31 
\'\'Dim lst As List(of DataRow)=DataTables(s).Select("金额>=0","金额 desc")
Chart.AxisX.Min = 1  \'指定X轴的最小值,也就是从1月开始
Chart.AxisX.Max = 31 \'\'指定X轴的最大值,一年只有12个月
For day As Integer = 1 To 31 \'逐月设置坐标
    Series.X(day-1) = day  
Chart.Axisx.SetValueLabel(day, day)   \'指定水平坐标为月份
    Dim r As DataRow = DataTables(s).Find("月 = " & Date.today.Month & " and 日=" & day)\'找出对应年月的行
    If r IsNot Nothing \'如果找到对应年月的行
        Series.Y(day-1) = math.round(r("金额")/10000,2) \'指定数量作为垂直坐标
    End If
Next
series.TooltipText="{#YVAL}"




--  作者:有点甜
--  发布时间:2019/5/26 13:14:00
--  

我分别测试下面代码没问题。请做一个具体实例发上来测试。

 

Dim Chart As WinForm.Chart \'定义一个图表变量
Dim Series As WinForm.ChartSeries \'定义一个图系变量
Chart= e.Form.Controls("Chart1") \' 引用窗口中的图表
Chart.SeriesList.Clear() \'清除图表原来的图系
Series = Chart.SeriesList.Add() \'增加一个图系
Series.Length = 30 \'新增图系包括10个数据点
For i As Integer = 0 To 29 \'指定每个数据点的位置

    Series.X(i) = i \'指定水平坐标
    Series.Y(i) = i + Rand.Next(5) \'垂直坐标用随机数生成
Next

 

-----------------

 

Dim Chart As WinForm.Chart \'定义一个图表变量
Dim Series As WinForm.ChartSeries \'定义一个图系变量
Chart= e.Form.Controls("Chart1") \' 引用窗口中的图表
Chart.SeriesList.Clear() \'清除图表原来的图系
Series = Chart.SeriesList.Add() \'增加一个图系
Series.Length = 10 \'新增图系包括10个数据点
For i As Integer = 0 To 9 \'指定每个数据点的位置
    Series.X(i) = i \'指定水平坐标
    Series.Y(i) = i + Rand.Next(5) \'垂直坐标用随机数生成
Next


--  作者:rjh4078
--  发布时间:2019/5/26 16:15:00
--  
搞了一晚上 大概知道问题的所在了  同一个chart用多个代码生成的时候 什么clear根本没用  必须把所有属性重新定义一遍  我这个问题的原因 就是上一个表的X轴长度是30 下一个表变成5了 它不能自动匹配 需要手动去指定 总体感觉FT的chart速度比echart快 但是BUG太多 帮助写的也很简单 
--  作者:有点甜
--  发布时间:2019/5/26 20:00:00
--  

1、做一个实例发上来测试;

 

2、你可以用多个chart控件,显示一个,隐藏其余的。