以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 统计目录树问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=127417) |
-- 作者:aza520 -- 发布时间:2018/11/13 17:54:00 -- 统计目录树问题 我想将图中的加载树显示为例如:加载所有数据(在场274人,退场100人)。其中274人=374人(总人数)-100人(退场人数),请问以下代码该如何修改 Dim dg
As DataTable Dim b
As New SQLGroupTableBuilder("统计表1","劳务人员登记表") b.ConnectionName
= "xlgl" If User.Name = "开发者"
Or User.Name = "管理员"
Then b.Filter = "" Else b.Filter = "承包人机构 in (\'" &
User.Roles.replace(",","\',\'") &
"\') or 监理机构 in (\'" & User.Roles.replace(",","\',\'")
& "\') or 业主机构 in (\'" & User.Roles.replace(",","\',\'")
& "\') or 劳务队负责人
in (\'" & User.Roles.replace(",","\',\'") &
"\')" End If b.Groups.AddDef("项目名称") b.Groups.AddDef("施工合同段") b.Groups.AddDef("劳务队名称") b.Groups.AddDef("工种") b.Totals.AddDef("姓名",AggregateEnum.Count,"总人数") \'根据客户列来统计记录数,也就是订单数 b.Totals.AddDef("退场时间",AggregateEnum.Count,"退场人数") \'根据客户列来统计记录数,也就是订单数 dg = b.Build(True) \'参数设置为True,生成一个临时表,不在主界面显示 \'然后根据统计表生成目录树 Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1") trv.BuildTree(dg,"项目名称|施工合同段|劳务队名称|工种") trv.StopRedraw For Each nd As WinForm.TreeNode In trv.AllNodes Dim
Xmmc As String = "\'"
& nd.DataRow("项目名称") & "\'" Dim
Xghtd As String = "\'"
& nd.DataRow("施工合同段") & "\'" Dim
Lwdmc As String = "\'"
& nd.DataRow("劳务队名称") & "\'" Dim
Gz As String = "\'"
& nd.DataRow("工种") & "\'" Select
Case nd.Level Case
0 nd.Text = nd.text & "(" &
dg.Compute("Sum(总人数)","项目名称 = " & Xmmc) & "人)" Case
1 nd.Text = nd.text & "(" &
dg.Compute("Sum(总人数)","项目名称 = " & Xmmc & " And 施工合同段 = " &
Xghtd) & "人)" Case
2 nd.Text = nd.text & "(" &
dg.Compute("Sum(总人数)","项目名称 = " & Xmmc & " And 施工合同段 = " &
Xghtd & " And 劳务队名称 = " &
Lwdmc) & "人)" Case
3 nd.Text = nd.text & "(" &
nd.DataRow("总人数") &
"人)" End
Select Next trv.Nodes.Insert("加载所有数据","加载所有数据(" & dg.Compute("Sum(总人数)") &
"人)",0) trv.ResumeRedraw e.Form.Controls("TextBox5").Value = 1 & "/"
& DataTables("劳务人员登记表").TotalPages vars("劳务人员登记表filter") = DataTables("劳务人员登记表").LoadFilter |
-- 作者:有点甜 -- 发布时间:2018/11/13 18:03:00 -- b.Totals.AddDef("退场时间",AggregateEnum.Count,"退场人数") \'根据客户列来统计记录数,也就是订单数
改成
b.Totals.Add("退场人数", "case when 退场时间 is null then 0 else 1 end") \'根据客户列来统计记录数,也就是订单数
--------------------------
trv.Nodes.Insert("加载所有数据","加载所有数据(" & dg.Compute("Sum(总人数)") & "人)",0)
改成
Dim suoyou = dg.Compute("Sum(总人数)") Dim tc = dg.Compute("Sum(退场人数)") trv.Nodes.Insert("加载所有数据","加载所有数据(在场" & suoyou-tc & "人,退场" & tc & "人)",0) |
-- 作者:aza520 -- 发布时间:2018/11/13 19:15:00 -- 老师,显示以下错误。我的退场时间列是日期型数据 |
-- 作者:有点蓝 -- 发布时间:2018/11/13 20:28:00 -- access数据库? b.Totals.Add("退场人数", "iif( 退场时间 is null ,0 ,1 )")
|
-- 作者:aza520 -- 发布时间:2018/11/14 10:25:00 -- 是SQL |
-- 作者:有点甜 -- 发布时间:2018/11/14 10:28:00 -- 改成
b.Totals.AddExp("退场人数", "case when 退场时间 is null then 0 else 1 end") \'根据客户列来统计记录数,也就是订单数 |
-- 作者:aza520 -- 发布时间:2018/11/14 11:48:00 -- 老师,我想每个目录树节点下都能显示在场和退场人数,我把代码改成以下,Case 3不知道怎么改,出现图示问题,请问老师怎么解决,Case 3又怎么改? Dim dg As DataTable Dim b As New SQLGroupTableBuilder("统计表1","劳务人员登记表") b.C If User.Name = "开发者" Or User.Name = "管理员" Then b.Filter = "" Else b.Filter = "承包人机构 in (\'" & User.Roles.replace(",","\',\'") & "\') or 监理机构 in (\'" & User.Roles.replace(",","\',\'") & "\') or 业主机构 in (\'" & User.Roles.replace(",","\',\'") & "\') or 劳务队负责人 in (\'" & User.Roles.replace(",","\',\'") & "\')" End If b.Groups.AddDef("项目名称") b.Groups.AddDef("施工合同段") b.Groups.AddDef("劳务队名称") b.Groups.AddDef("工种") b.Totals.AddDef("姓名",AggregateEnum.Count,"人数") \'根据客户列来统计记录数,也就是订单数 b.Totals.AddExp("退场人数", "case when 退场时间 is null then 0 else 1 end") \'根据客户列来统计记录数,也就是订单数 dg = b.Build(True) \'参数设置为True,生成一个临时表,不在主界面显示 \'然后根据统计表生成目录树 Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1") trv.BuildTree(dg,"项目名称|施工合同段|劳务队名称|工种") trv.StopRedraw For Each nd As WinForm.TreeNode In trv.AllNodes Dim Xmmc As String = "\'" & nd.DataRow("项目名称") & "\'" Dim Xghtd As String = "\'" & nd.DataRow("施工合同段") & "\'" Dim Lwdmc As String = "\'" & nd.DataRow("劳务队名称") & "\'" Dim Gz As String = "\'" & nd.DataRow("工种") & "\'" Dim suoyou = dg.Compute("Sum(人数)") Dim tc = dg.Compute("Sum(退场人数)") Select Case nd.Level Case 0 nd.Text = nd.text & "(在场" & suoyou-tc & "人,退场" & tc & "人,"项目名称 = " & Xmmc) & "人)" Case 1 nd.Text = nd.text & "(在场" & suoyou-tc & "人,退场" & tc & "人,"项目名称 = " & Xmmc & " And 施工合同段 = " & Xghtd) & "人)" Case 2 nd.Text = nd.text & "(在场" & suoyou-tc & "人,退场" & tc & "人,"项目名称 = " & Xmmc & " And 施工合同段 = " & Xghtd & " And 劳务队名称 = " & Lwdmc) & "人)" Case 3 nd.Text = nd.text & "(" & nd.DataRow("人数") & "人)" End Select Next trv.Nodes.Insert("加载所有数据","加载所有数据(在场" & suoyou-tc & "人,退场" & tc & "人)",0) trv.ResumeRedraw e.Form.Controls("TextBox5").Value = 1 & "/" & DataTables("劳务人员登记表").TotalPages vars("劳务人员登记表filter") = DataTables("劳务人员登记表").LoadFilter 图 |
-- 作者:有点甜 -- 发布时间:2018/11/14 12:00:00 -- 看懂代码,改成自己需要的。如果自己不会改,实例发上来测试。
Dim dg As DataTable If User.Name = "开发者" Or User.Name = "管理员" Then
For Each nd As WinForm.TreeNode In trv.AllNodes
|
-- 作者:aza520 -- 发布时间:2018/11/14 15:47:00 -- 老师显示以上错误:(良梅路二期是项目名称) .NET Framework 版本:2.0.50727.8833 Foxtable 版本:2017.12.18.1 错误所在事件:窗口,劳务人员登记表,AfterLoad 详细错误信息: 语法错误:“良梅路二期”运算符后缺少操作数。 |
-- 作者:有点甜 -- 发布时间:2018/11/14 16:14:00 -- 1、加入msgbox定位出错位置
http://www.foxtable.com/webhelp/scr/1485.htm
2、具体实例发上来测试 |