以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  图表的筛选问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=23695)

--  作者:paullqxp
--  发布时间:2012/9/17 11:06:00
--  图表的筛选问题

在做图表时 遇到个筛选的问题

我的原表没有“年”这个列,只有“日期”列,想在窗体上做个年份的筛选,并能根据筛选的值,让图表只显示选定年份的数据

不会写代码,望高手赐教!

谢谢!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试用.table


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

--  作者:狐狸爸爸
--  发布时间:2012/9/17 12:44:00
--  

能日期筛选,就能按年筛选,按年筛选,就是筛选这年的1月1日到12月31日的行,例如2008年的:

 

Dim dt1 As  Date = New Date(2008,1,1)

Dim dt2 As Date = New Date(2008,12,31)

....Filter = "日期 >= #" dt1 & "# And 日期 <= #" & dt2 & "#"


--  作者:paullqxp
--  发布时间:2012/9/17 13:25:00
--  

感谢狐爸的提示,我在组合框内容变更事件里写了下面的代码

 

=======================================================

Dim nf As WinForm.ComboBox = e.Form.Controls("ComboBox1")
nf.ComboList = DataTables("统计表1").GetComboListString("年")            \'定义nf(年份)这个组合框,内容为统计表1的“年”列的值

 

Tables("表B").Filter = ("日期 >= #1/1/" & nf.Text & "# and 日期 <= #12/31/" & nf.Text & "#")     \'利用组合框的值来对表B做筛选 筛选出当年的数据

 

Dim g As New CrossTableBuilder("统计表1", DataTables("表B"))              ’下面是复制的系统自动生成的交叉汇总的代码
g.HGroups.AddDef("日期", DateGroupEnum.Year, "年")
g.VGroups.AddDef("商品")
g.Totals.AddDef("销量", "销量")
g.Build()

=========================================================

当我点选组合框的值时,陷入死循环,我估计是由于组合框的值来自于汇总的临时表,而点选组合框的值对源表B做筛选,导致筛选、汇总之间陷入死循环

不知狐爸有啥好建议没有?

 


--  作者:paullqxp
--  发布时间:2012/9/17 13:27:00
--  
我这个问题的瓶颈在于,如何通过“日期”列,让组合框获得“年份”的值(不重复)
--  作者:狐狸爸爸
--  发布时间:2012/9/17 13:53:00
--  

另外增加一个统计按钮,单击才开始进行统计。

 

至于年份,用数值框直接输入,默认值设置为当年,用上下微调按钮来调整。

一定要选的话,在窗口的AfterLoad事件加入代码:

 

Dim min As Date = DataTables("表B").Compute("Min(日期)")
Dim max As Date = DataTables("表B").Compute("Max(日期)")
Dim cmb As WinForm.ComboBox = e.Form.Controls("ComboBox1")
For y As Integer = min.Year To max.Year
    cmb.items.add(y)
Next

 

 


--  作者:mr725
--  发布时间:2012/9/17 14:01:00
--  
动态增加一个“年份”列,一切都简单了···
--  作者:paullqxp
--  发布时间:2012/9/17 14:15:00
--  
以下是引用mr725在2012-9-17 14:01:00的发言:
动态增加一个“年份”列,一切都简单了···

怎么增加?不会啊!


--  作者:paullqxp
--  发布时间:2012/9/17 14:22:00
--  
以下是引用狐狸爸爸在2012-9-17 13:53:00的发言:

另外增加一个统计按钮,单击才开始进行统计。

 

至于年份,用数值框直接输入,默认值设置为当年,用上下微调按钮来调整。

一定要选的话,在窗口的AfterLoad事件加入代码:

 

Dim min As Date = DataTables("表B").Compute("Min(日期)")
Dim max As Date = DataTables("表B").Compute("Max(日期)")
Dim cmb As WinForm.ComboBox = e.Form.Controls("ComboBox1")
For y As Integer = min.Year To max.Year
    cmb.items.add(y)
Next

 

 

运行的效果是:点选一次组合框,多出来一次年份,越点越多


--  作者:lin_hailun
--  发布时间:2012/9/17 14:25:00
--  
 在窗口的AfterLoad事件加入代码
--  作者:paullqxp
--  发布时间:2012/9/17 15:13:00
--  
增加了“年份”的列 解决了