以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 加载树显示统计数据 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=140091) |
-- 作者:Jaime -- 发布时间:2019/8/29 11:13:00 -- 加载树显示统计数据 老师好! 我的数据是SQL Server,我本机模拟服务器运行以下代码正常,请问如何在加载树显示统计数据, 一直改不成功,请老师帮帮我! \'----用SQL语句设计加载树--P2054---- Dim cmd As New SQLCommand Dim dt As DataTable cmd.C cmd.CommandText = "SELECT DISTINCT 进度,单位名称,报单日期 Fr om {计划单}" dt = cmd.ExecuteReader() Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1") trv.BuildTree(dt,"进度|单位名称|报单日期") trv.Nodes.Insert("加载所有数据",0) Dim Filter As String If e.node.Text = "加载所有数据" Then Filter = "" Else Dim dr As DataRow = e.Node.DataRow \'获取生成此节点的DataRow Select Case e.Node.Level Case 0 Filter ="[进度] = \'" & dr("进度") & "\'" Case 1 Filter ="[进度] = \'" & dr("进度") & "\' And [单位名称] = \'" & dr("单位名称") & "\'" Case 2 Filter ="[进度] = \'" & dr("进度") & "\' And [单位名称] = \'" & dr("单位名称") & "\'And [报单日期] = \'" & dr("报单日期") & "\'" End Select End If DataTables("计划单").LoadFilter = Filter DataTables("计划单").Load() [此贴子已经被作者于2019/8/29 11:35:23编辑过]
|
-- 作者:有点蓝 -- 发布时间:2019/8/29 11:21:00 -- 参考:http://www.foxtable.com/webhelp/topics/2742.htm |
-- 作者:Jaime -- 发布时间:2019/8/29 11:35:00 -- 抱歉老师,我刚才参考发的地址错了,就是您发的这个,我没做成功,总出错 |
-- 作者:有点蓝 -- 发布时间:2019/8/29 11:37:00 -- 不需要使用SQLCommand,直接使用SQLGroupTableBuilder进行统计生成统计表即可 |
-- 作者:Jaime -- 发布时间:2019/8/29 11:47:00 -- 老师,如果我希望只筛选“进度”列里, ‘已审核’ 的内容,请问怎么改? \'----用SQL语句设计加载树--P2054---- Dim cmd As New SQLCommand Dim dt As DataTable cmd.C cmd.CommandText = "SELECT DISTINCT 进度,单位名称,报单日期 Fr om {计划单}" dt = cmd.ExecuteReader() Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1") trv.BuildTree(dt,"进度|单位名称|报单日期") trv.Nodes.Insert("加载所有数据",0) |
-- 作者:有点蓝 -- 发布时间:2019/8/29 11:52:00 -- cmd.CommandText = "SELECT DISTINCT 进度,单位名称,报单日期 Fr om {计划单} where 进度=\'已审核\'" |
-- 作者:Jaime -- 发布时间:2019/8/30 12:00:00 -- 此主题相关图片如下:126789.png 老师好!我写的还是有问题,我希望通过加载树只加载“已报单”的计划单,第一层是单位名称,第二层是报单日期。 单位上的统计数应该是3,第二个日期里出现了非 已报单的,请老师帮助我看看,是哪里错了 Dim dt As DataTable Dim b As New SQLGroupTableBuilder("统计表1","计划单") b.C \'b.Groups.AddDef("进度") b.Groups.AddDef("单位名称") b.Groups.AddDef("报单日期", DateGroupEnum.None) \'根据日期按年分组) b.Totals.AddDef("_Identify",AggregateEnum.Count,"订单数") \'根据主键列来统计记录数,也就是订单数 b.Filter = "{计划单}.进度 = \'已报单\'" dt = b.Build(True) \'参数设置为True,生成一个临时表,不在主界面显示 \'然后根据统计表生成目录树 Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1") trv.BuildTree(dt, "单位名称|报单日期") trv.StopRedraw For Each nd As WinForm.TreeNode In trv.AllNodes Dim Product As String = nd.DataRow("单位名称") Dim Year As Date = nd.DataRow("报单日期") Select Case nd.Level Case 0 nd.Text = nd.text & "(" & nd.DataRow("订单数") & ")" Case 1 nd.Text = nd.text & "(" & nd.DataRow("订单数") & ")" End Select Next \'trv.Nodes.Insert("加载所有行","加载所有行(" & dt.Compute("Sum(订单数)") & "条)",0) trv.ResumeRedraw Dim Filter As String If e.node.Text = "加载所有数据" Then Filter = "进度= \'已报单\'" Else Dim dr As DataRow = e.Node.DataRow \'获取生成此节点的DataRow Select Case e.Node.Level Case 0 Filter ="[单位名称] = \'" & dr("单位名称") & "\'" Case 1 Filter ="[单位名称] = \'" & dr("单位名称") & "\'And [报单日期] = \'" & dr("报单日期") & "\'" End Select End If DataTables("计划单").LoadFilter = Filter DataTables("计划单").Load() |
-- 作者:有点蓝 -- 发布时间:2019/8/30 14:04:00 -- …… b.Filter = "进度 = \'已报单\'" dt = b.Build(True) \'参数设置为True,生成一个临时表,不在主界面显示 \'然后根据统计表生成目录树 Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1") trv.BuildTree(dt, "单位名称|报单日期") trv.StopRedraw For Each nd As WinForm.TreeNode In trv.AllNodes Dim Product As String = nd.DataRow("单位名称") Dim Year As Date = nd.DataRow("报单日期") Select Case nd.Level Case 0 nd.Text = nd.text & "(" & dt.compute("sum(订单数)","单位名称=\'" & Product & "\'") & ")" Case 1 nd.Text = nd.text & "(" & nd.DataRow("订单数") & ")" End Select Next |
-- 作者:Jaime -- 发布时间:2019/8/31 10:06:00 -- 老师好! 代码测试后, 后面显示的统计数(1+2=3)是对的,但是根据条件后台加载的计划单12行不对,请问怎么改 Dim dt As DataTable Dim b As New SQLGroupTableBuilder("统计表1","计划单") b.C \'b.Groups.AddDef("进度") b.Groups.AddDef("单位名称") b.Groups.AddDef("报单日期", DateGroupEnum.None) \'根据日期按年分组) b.Totals.AddDef("_Identify",AggregateEnum.Count,"订单数") \'根据主键列来统计记录数,也就是订单数 b.Filter = "进度 = \'待复核\'" dt = b.Build(True) \'参数设置为True,生成一个临时表,不在主界面显示 \'然后根据统计表生成目录树 Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1") trv.BuildTree(dt, "单位名称|报单日期") trv.StopRedraw For Each nd As WinForm.TreeNode In trv.AllNodes Dim Product As String = nd.DataRow("单位名称") Dim Year As Date = nd.DataRow("报单日期") Select Case nd.Level Case 0 nd.Text = nd.text & "(" & dt.compute("sum(订单数)","单位名称=\'"& Product & "\'") &")" Case 1 nd.Text = nd.text & "(" & nd.DataRow("订单数") & ")" End Select Next \'trv.Nodes.Insert("加载所有行","加载所有行(" & dt.Compute("Sum(订单数)") & "条)",0) trv.ResumeRedraw [此贴子已经被作者于2019/8/31 10:08:45编辑过]
|
-- 作者:有点蓝 -- 发布时间:2019/8/31 10:12:00 -- 什么东西不对?没看出来 |