Foxtable(狐表)用户栏目专家坐堂 → [求助]如何生成柱状+线状图标


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

主题:[求助]如何生成柱状+线状图标

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


加好友 发短信
等级:三尾狐 帖子:660 积分:3965 威望:0 精华:0 注册:2014/3/16 20:34:00
  发帖心情 Post By:2014/4/15 15:39:00 [只看该作者]

目标和销量和合计,达成率是通过合计的销量除以合计销量得出的

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


加好友 发短信
等级:三尾狐 帖子:660 积分:3965 威望:0 精华:0 注册:2014/3/16 20:34:00
  发帖心情 Post By:2014/4/15 15:45:00 [只看该作者]

请问第二个问题,做图表的,代码是怎么样的??


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/15 16:09:00 [只看该作者]

 第一个问题的代码

 

Dim nr As Row = Tables("统计").AddNew
nr(0) = "合计"
For Each c As Col In Tables("统计").Cols
    If c.IsNumeric AndAlso c.DataCol.Expression = "" Then
        nr(c.name) = Tables("统计").Compute("sum([" & c.Name & "])", Tables("统计").Cols(0).Name & " <> '合计'")
    End If
Next


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/15 16:09:00 [只看该作者]

第二个问题的代码

 


Dim Chart As WinForm.Chart '定义一个图表变量
Dim Series As WinForm.ChartSeries '定义一个图系变量
Dim t As Table = Tables("统计") '定义一个变量t引用数据表
Chart= e.Form.Controls("Chart1") ' 引用窗口中的图表
Chart.ChartType = ChartTypeEnum.Bar '图表类型改为Bar(条形)
Chart.SeriesList.Clear() '清除图表原来的图系
Series = Chart.SeriesList.Add() '增加一个图系
Series.Length = (t.Cols.Count-3) / 3 '图系的数据点数等于表的行数
Dim Series1 As WinForm.ChartSeries = Chart.SeriesList.Add()
Series1.Length = (t.Cols.Count-3) / 3 '图系的数据点数等于表的行数
Dim Series2 As WinForm.ChartSeries = Chart.SeriesList2.Add() '给图表2增加一个图系
Series2.Length = (t.Cols.Count-3) / 3 '图系的数据点数等于表的行数
Chart.ChartType2 = ChartTypeEnum.XYPlot
Series.Text = "目标"
Series1.Text = "销量"
Series2.Text = "达成率"

Dim i As Integer = 0
For Each c As Col In Tables("统计").Cols
    If c.Name.EndsWith("目标") Then
        Series.X(i) = i '指定水平坐标
        Series1.X(i) = i '指定水平坐标
        Series2.X(i) = i '指定水平坐标
        Series.Y(i) = nr(c.Name) '指定垂直坐标
        Series1.Y(i) = nr(Tables("统计").Cols(c.Index+1).Name) '指定垂直坐标
        Series2.Y(i) = nr(Tables("统计").Cols(c.Index+2).Name) '指定垂直坐标
        Chart.AxisX.SetValueLabel(i, c.Name.Split("_")(1)) '指定字符表示
                i+=1
    End If
Next
Chart.AxisX.AnnoWithLabels = True '启用字符标示
Chart.LegendVisible = True '显示图列
Chart.LegendCompass= CompassEnum.South '图列显示在南方(底端)
Chart.VisualEffect = True '加上这一行,让你的图表更漂亮
Chart.AxisY.Text = "金额"
Chart.AxisY2.Text = "比例"


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


加好友 发短信
等级:三尾狐 帖子:660 积分:3965 威望:0 精华:0 注册:2014/3/16 20:34:00
  发帖心情 Post By:2014/4/15 16:24:00 [只看该作者]

有点甜,版主,你好~~非常感谢你给的技术支持;

我将你的代码套入到按钮代码中,出现以下错误。是否能解答?
图片点击可在新窗口打开查看此主题相关图片如下:360截图20140415162217156.jpg
图片点击可在新窗口打开查看

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


加好友 发短信
等级:三尾狐 帖子:660 积分:3965 威望:0 精华:0 注册:2014/3/16 20:34:00
  发帖心情 Post By:2014/4/15 16:25:00 [只看该作者]

整个按钮代码是
Dim Cmd As new SQLCommand
Cmd.C
Cmd.CommandText = "select distinct 分区,年,月份,目标 from 目标 where " & CustomFilter
Dim dt1 As DataTable = Cmd.ExecuteReader
Dim dtb As New DataTableBuilder("统计")
dtb.AddDef("分区", Gettype(String), 50)
Dim prds As List(of String()) = dt1.GetUniqueValues("","年","月份")
Dim exp As String
Dim prd As String()
dtb.AddDef("目标总额", Gettype(Double))
dtb.AddDef("销售总额", Gettype(Double))
dtb.AddDef("达成率", Gettype(Double),"[销售总额]/[目标总额]")
For Each prd In prds
    dtb.AddDef(prd(0) & "_" & prd(1) & "_目标", Gettype(Double))
    dtb.AddDef(prd(0) & "_" & prd(1) & "_销售", Gettype(Double))
    exp = String.format("[{0}]/[{1}]",prd(0) & "_" & prd(1) & "_销售" ,prd(0) & "_" & prd(1) & "_目标" )
    dtb.AddDef(prd(0) & "_" & prd(1) & "_达成率", Gettype(Double),exp)
Next
dtb.Build()
Cmd.CommandText = "select 分区,year(日期) as 年,month(日期) as 月份,sum(金额) as 销售 from 订单 where " & CustomFilter & " group by 分区,year(日期),month(日期)"
Dim dt2 As DataTable = Cmd.ExecuteReader
Dim dr As DataRow
For Each cus As String In dt1.GetUniqueValues("","分区")
    dr = DataTables("统计").AddNew()
    dr("分区") = cus
    For Each prd In prds
        dr(prd(0) & "_" & prd(1) & "_目标") = dt1.Compute("Sum(目标)","分区 = '" & cus & "' And [年] = '" & prd(0) & "' and 月份 = '"& prd(1) &"'")
        dr(prd(0) & "_" & prd(1) & "_销售") = dt2.Compute("Sum(销售)","分区 = '" & cus & "' And [年] = '" & prd(0) & "' and 月份 = '"& prd(1) &"'")
    Next
    dr("目标总额") = dt1.Compute("Sum(目标)","分区 = '" & cus & "'")
    dr("销售总额") = dt2.Compute("Sum(销售)","分区 = '" & cus & "'")
Next
'******************************合计行
dr = DataTables("统计").AddNew()
dr("分区") = "合计"
For Each prd In prds
    Dim ColName1 As String = prd(0) & "_" & prd(1) & "_目标"
    Dim ColName2 As String = prd(0) & "_" & prd(1) & "_销售"
    dr(ColName1) = dt1.Compute("Sum(目标)","[年] = '" & prd(0) & "' and 月份 = '"& prd(1) &"'")
    dr(ColName2) = dt2.Compute("Sum(销售)","[年] = '" & prd(0) & "' and 月份 = '"& prd(1) &"'")
Next
dr("目标总额") = DataTables("统计").Compute("Sum(目标总额)")
dr("销售总额") = DataTables("统计").Compute("Sum(销售总额)")
'********************************

For Each prd In prds
    DataTables("统计").DataCols(prd(0) & "_" & prd(1) & "_达成率").SetFormat("0.00%")
Next
DataTables("统计").DataCols("达成率").SetFormat("0.00%")
MainTable = Tables("统计")
Tables("统计").AutoSizeCols


Dim Chart As WinForm.Chart '定义一个图表变量
Dim Series As WinForm.ChartSeries '定义一个图系变量
Dim t As Table = Tables("统计") '定义一个变量t引用数据表
Chart= e.Form.Controls("Chart1") ' 引用窗口中的图表
Chart.ChartType = ChartTypeEnum.Bar '图表类型改为Bar(条形)
Chart.SeriesList.Clear() '清除图表原来的图系
Series = Chart.SeriesList.Add() '增加一个图系
Series.Length = (t.Cols.Count-3) / 3 '图系的数据点数等于表的行数
Dim Series1 As WinForm.ChartSeries = Chart.SeriesList.Add()
Series1.Length = (t.Cols.Count-3) / 3 '图系的数据点数等于表的行数
Dim Series2 As WinForm.ChartSeries = Chart.SeriesList2.Add() '给图表2增加一个图系
Series2.Length = (t.Cols.Count-3) / 3 '图系的数据点数等于表的行数
Chart.ChartType2 = ChartTypeEnum.XYPlot
Series.Text = "目标"
Series1.Text = "销售"
Series2.Text = "达成率"
Dim i As Integer = 0
For Each c As Col In Tables("统计").Cols
    If c.Name.EndsWith("目标") Then
        Series.X(i) = i '指定水平坐标
        Series1.X(i) = i '指定水平坐标
        Series2.X(i) = i '指定水平坐标
        Series.Y(i) = nr(c.Name) '指定垂直坐标
        Series1.Y(i) = nr(Tables("统计").Cols(c.Index+1).Name) '指定垂直坐标
        Series2.Y(i) = nr(Tables("统计").Cols(c.Index+2).Name) '指定垂直坐标
        Chart.AxisX.SetValueLabel(i, c.Name.Split("_")(1)) '指定字符表示
                i+=1
    End If
Next
Chart.AxisX.AnnoWithLabels = True '启用字符标示
Chart.LegendVisible = True '显示图列
Chart.LegendCompass= CompassEnum.South '图列显示在南方(底端)
Chart.VisualEffect = True '加上这一行,让你的图表更漂亮
Chart.AxisY.Text = "金额"
Chart.AxisY2.Text = "比例"


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/4/15 16:25:00 [只看该作者]

这个是窗口按钮的代码. 你放到菜单去是不行的.

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


加好友 发短信
等级:三尾狐 帖子:660 积分:3965 威望:0 精华:0 注册:2014/3/16 20:34:00
  发帖心情 Post By:2014/4/15 16:37:00 [只看该作者]

对的,我是放到按钮上的,然后出现错误
图片点击可在新窗口打开查看此主题相关图片如下:360截图20140415163452078.jpg
图片点击可在新窗口打开查看


图片点击可在新窗口打开查看此主题相关图片如下:360截图20140415163607046.jpg
图片点击可在新窗口打开查看

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/15 16:40:00 [只看该作者]

 你需要先添加第一段代码

 

Dim nr As Row = Tables("统计").AddNew
nr(0) = "合计"
For Each c As Col In Tables("统计").Cols
    If c.IsNumeric AndAlso c.DataCol.Expression = "" Then
        nr(c.name) = Tables("统计").Compute("sum([" & c.Name & "])", Tables("统计").Cols(0).Name & " <> '合计'")
    End If
Next


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


加好友 发短信
等级:三尾狐 帖子:660 积分:3965 威望:0 精华:0 注册:2014/3/16 20:34:00
  发帖心情 Post By:2014/4/15 17:11:00 [只看该作者]

成功了,谢谢老师指点~感激不尽。

 回到顶部
总数 21 上一页 1 2 3 下一页