Foxtable(狐表)用户栏目专家坐堂 → 图表的BUG


  共有1981人关注过本帖树形打印复制链接

主题:图表的BUG

帅哥哟,离线,有人找我吗?
rjh4078
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3358 积分:24758 威望:0 精华:0 注册:2012/3/26 21:47:00
图表的BUG  发帖心情 Post By:2019/5/25 12:12:00 [只看该作者]


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


图表1是条形图
图表2是饼形图
生成1以后再生成2  就会留下一个如图示的标签
每个图生成之前已经clear图系了
Chart.AxisX.ClearValueLabel()
Chart.AxisY.ClearValueLabel()
也加了 没什么卵用

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107584 积分:547217 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/5/25 13:54:00 [只看该作者]

测试没有问题,上传具体实例说明

 回到顶部
帅哥哟,离线,有人找我吗?
rjh4078
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3358 积分:24758 威望:0 精华:0 注册:2012/3/26 21:47:00
  发帖心情 Post By:2019/5/25 14:52:00 [只看该作者]

 看我的截图就是有问题  例子不好做  我
图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20190525144550.png
图片点击可在新窗口打开查看
这个表是很多个表查询生成的  

具体再说下我的逻辑吧
chart是一个窗口里的唯一控件
每个button按一次就统计一个表 现在的情况是button1生成图表以后 按button2再生成 就会出现这个绿色标签 但是先生成button2再生成button1就不会 
 button1 代码

cmd.CommandText=sql
dt=cmd.ExecuteReader
Dim s As String="工作量统计"
Dim g As New GroupTableBuilder(s, dt)
g.Groups.AddDef("制作人")
g.Totals.AddDef("工作量")
g.GrandProportion = True
g.Filter = "[制作人] is not null"
g.Build()
Tables(s).Sort="工作量 desc "
Dim tt As Table=Tables(s)
Dim Chart As WinForm.Chart '定义一个图表变量
Dim Series As WinForm.ChartSeries '定义一个图系变量
Chart = f.Controls("Chart2") ' 引用窗口中的图表
Chart.SeriesList.Clear() '清除图表原来的图系
chart.SeriesList2.Clear()
Chart.AxisX.ClearValueLabel()
'Chart.VisualEffect = True '加上这一行,让你的图表更漂亮
Chart.ChartType = ChartTypeEnum.Bar '图表1类型该为Bar(条形)
Chart.ChartType2 = ChartTypeEnum.XYPlot '图表2类型该为线形
''Chart.DataSource = s '设置绑定表
''Chart.AxisX.Major = 2
Chart.SeriesList.Clear() '清除图表原来的图系
chart.SeriesList2.Clear()
Series = Chart.SeriesList.Add() '给图表1增加一个图系
Series.Length = tt.Rows.Count
For i As Integer = 0 To tt.Rows.Count - 1 '指定每个数据点的位置
    Series.X(i) = i '指定水平坐标
    Series.Y(i) = tt.Rows(i)("工作量") '指定垂直坐标
    Chart.AxisX.SetValueLabel(i, tt.Rows(i)("制作人"))
Next
Chart.AxisX.AnnoWithLabels = True
Series.DataLabelText = "{#YVAL}"
Series.Text="工作量"
Series.DataLabelBackColor = Color.RED '蓝底
Series.DataLabelForeColor = Color.White '白字
'清除图表原来的图系
Series = Chart.SeriesList2.Add() '给图表1增加一个图系
Series.Length = tt.Rows.Count
For i As Integer = 0 To tt.Rows.Count - 1 '指定每个数据点的位置
    Series.X(i) = i '指定水平坐标
    Series.Y(i) = tt.Rows(i)("工作量gdr") '指定垂直坐标
Next
Series.Text="工作量占比"




Dim c1Chart1 = Chart.basecontrol
Dim lbls = c1Chart1.ChartLabels
For i As Integer = 0 To Tables(s).rows.count-1
    Dim lbl As C1.Win.C1Chart.Label = lbls.LabelsCollection.AddNewLabel()
    lbl.Text = Format(series.y(i), "0.00%")    
    lbl.AttachMethod = C1.Win.C1Chart.AttachMethodEnum.DataIndex
    lbl.AttachMethodData.GroupIndex = 0
    lbl.AttachMethodData.SeriesIndex = 0
    lbl.AttachMethodData.PointIndex = i
    lbl.Style.ForeColor = Color.white
    lbl.Style.backcolor= Color.green
    lbl.style.font = new font("宋体", 10)
   '' lbl.Compass = LabelCompassEnum.east
    lbl.Visible = True
Next




button2代码

Dim cm d As new SQLCommand
cmd.Co nnectionName=Functions.Execute("返回数据源")
cmd.Co mmandText=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("客服")
g.Groups.AddDef("业务员")
g.Groups.AddDef("制单日期", DateGroupEnum.Year, "年")
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") ' 引用窗口中的图表
Chart.AxisX.ClearValueLabel()
Chart.AxisY.ClearValueLabel()
Chart.ChartType = ChartTypeEnum.Pie '图表1类型改为Bar(条形)
Chart.SeriesList.Clear
Chart.SeriesList2.Clear
For Each r As Row In t.Rows
    If r("金额")>0 Then
        Series = Chart.SeriesList.Add() '增加一个图系
        Series.Length = 1 '一个系列只能包括一个值
        Series.Text = r("客户简称") & "(" & math.round(r("金额"),2) & ")元" '设置图系的标题
        Series.Y(0) = math.round(r("金额"),2) '指定值
        Series.TooltipText = r("客户简称") & "发货金额:" & math.round(r("金额"),2) & "元"
        
        Series.DataLabelText =math.round(r("金额")/t.Compute("sum(金额)"),4) *100 & "%" '计算百分比
    End If
Next


Series = Chart.SeriesList.Add() '增加一个图系
Series.Length = 1 '一个系列只能包括一个值
Dim db As Double=math.round(t.Compute("sum(金额)")/10000,2)
Series.Text =  "发货总金额:" & db & "万元" '设置图系的标题
''Series.Y(0) = db '指定值
Series.TooltipText = "发货总金额:" & db  & "万元"


Chart.LegendVisible = True '显示图列
Chart.LegendCompass= CompassEnum.East '图列显示在东方(右方)

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107584 积分:547217 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/5/25 15:12:00 [只看该作者]

应该是这段代码的原因,ClearValueLabel对非常规的用法可能不起作用的,

Dim c1Chart1 = Chart.basecontrol
Dim lbls = c1Chart1.ChartLabels
For i As Integer = 0 To Tables(s).rows.count-1
    Dim lbl As C1.Win.C1Chart.Label = lbls.LabelsCollection.AddNewLabel()
    lbl.Text = Format(series.y(i), "0.00%")    
    lbl.AttachMethod = C1.Win.C1Chart.AttachMethodEnum.DataIndex
    lbl.AttachMethodData.GroupIndex = 0
    lbl.AttachMethodData.SeriesIndex = 0
    lbl.AttachMethodData.PointIndex = i
    lbl.Style.ForeColor = Color.white
    lbl.Style.backcolor= Color.green
    lbl.style.font = new font("宋体", 10)
   '' lbl.Compass = LabelCompassEnum.east
    lbl.Visible = True
Next

按钮2试试

Dim c1Chart1 = Chart.basecontrol
Dim lbls = c1Chart1.ChartLabels
lbls.LabelsCollection.Clear()
Chart.AxisX.ClearValueLabel()
Chart.AxisY.ClearValueLabel()
Chart.ChartType = ChartTypeEnum.Pie '图表1类型改为Bar(条形)


 回到顶部
帅哥哟,离线,有人找我吗?
rjh4078
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3358 积分:24758 威望:0 精华:0 注册:2012/3/26 21:47:00
  发帖心情 Post By:2019/5/25 16:49:00 [只看该作者]

搞定了图片点击可在新窗口打开查看

 回到顶部