以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  加载树显示统计数据  (http://foxtable.net/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行不对,请问怎么改

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

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
--  
什么东西不对?没看出来