以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  请教:关于图表,能否根据目录树选择生成?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=49237)

--  作者:bahamute
--  发布时间:2014/4/14 22:11:00
--  请教:关于图表,能否根据目录树选择生成?
交叉统计生成统计表1,垂直分组为【单位】,因单位实在太多(40多个),太密集,故从统计表1【单位】列生成目录树,希望根据目录树选择生成特定单位图表,但出现问题,生成的图表仍然包括所有单位,而不是筛选出的结果,是不是这种办法不可行?求指点。


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


目录树点击代码如下:

Dim Value() As String
Value = e.Node.FullPath.Split("\\")
Select Case e.Node.Level
    Case 0
        Tables("统计表1").Filter ="[单位] = \'" & Value(0) & "\'"
End Select

Dim Chart As WinForm.Chart \'定义一个图表变量
Dim Series As WinForm.ChartSeries \'定义一个图系变量
Dim t As Table = Tables("统计表1") \'定义一个变量t引用数据表
Chart = e.Form.Controls("Chart2") \' 引用窗口中的图表
Chart.ChartType = ChartTypeEnum.Bar \'图表类型改为Bar(条形)
Chart.DataSource = "统计表1" \'设置绑定表
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 = c.Name \'设置Y轴的绑定列
    End If
Next
Chart.VisualEffect = True \'加上这一行,让你的图表更漂亮
Chart.LegendVisible = True \'显示图列
Chart.LegendCompass= CompassEnum.South \'图列显示在南方(底端)
Chart.AxisX.AnnoRotation = - 45 \'X轴标示逆时针旋转45度

--  作者:有点甜
--  发布时间:2014/4/14 22:16:00
--  

 简单可以这样改

 

Dim Value() As String
Value = e.Node.FullPath.Split("\\")
Select Case e.Node.Level
    Case 0
        Tables("统计表1").Datatable.LoadFilter ="[单位] = \'" & Value(0) & "\'"
        Tables("统计表1").Datatable.Load
End Select

Dim Chart As WinForm.Chart \'定义一个图表变量
Dim Series As WinForm.ChartSeries \'定义一个图系变量
Dim t As Table = Tables("统计表1") \'定义一个变量t引用数据表
Chart = e.Form.Controls("Chart2") \' 引用窗口中的图表
Chart.ChartType = ChartTypeEnum.Bar \'图表类型改为Bar(条形)
Chart.DataSource = "统计表1" \'设置绑定表
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 = c.Name \'设置Y轴的绑定列
    End If
Next
Chart.VisualEffect = True \'加上这一行,让你的图表更漂亮
Chart.LegendVisible = True \'显示图列
Chart.LegendCompass= CompassEnum.South \'图列显示在南方(底端)
Chart.AxisX.AnnoRotation = - 45 \'X轴标示逆时针旋转45度

--  作者:有点甜
--  发布时间:2014/4/14 22:17:00
--  

 复杂可以这样改,不去绑定表和列,直接用数值去代替。

 

 看方法一和方法二的对比 http://www.foxtable.com/help/topics/0967.htm

 


--  作者:bahamute
--  发布时间:2014/4/14 23:06:00
--  
用2楼的办法不行,还是出现所有单位,3楼办法运行会出错!
特意做了一个例子,麻烦看一下,谢谢。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:项目017.foxdb


[此贴子已经被作者于2014-4-14 23:17:15编辑过]

--  作者:bahamute
--  发布时间:2014/4/14 23:32:00
--  


按照楼上的指点将这两句代码中的统计表1改为统计目标表后,OK!
Tables("表A").Datatable.LoadFilter ="[单位] = \'" & Value(0) & "\'"
        Tables("表A").Datatable.Load

[此贴子已经被作者于2014-4-15 10:18:20编辑过]

--  作者:bahamute
--  发布时间:2014/4/15 10:19:00
--  
采用LoadFilter办法后,感觉速度慢了,生成图表有延迟(统计表1的目标表有一万多行数据),正在琢磨其他办法。
比如生成统计表1后,用筛选树筛选,将筛选结果写入另一临时表2,然后将图表绑定到临时表2,是否就能间接实现根据点击目录树生成相应图表呢?

只是要随时将统计表1的筛选结果写入临时表2,用什么方式呢?


--  作者:有点甜
--  发布时间:2014/4/15 10:56:00
--  

 回复6楼。不要绑定表,用编码生成

 

 好好看看这个帮助文档,你在拿数据的之前,记得对表进行一下筛选,就行了

 

 看方法一和方法二的对比 http://www.foxtable.com/help/topics/0967.htm

 

[此贴子已经被作者于2014-4-15 10:56:10编辑过]