窗口的AfterLoad事件设为:
'首先生成统计表
Dim dt As DataTable
Dim b As New GroupTableBuilder("收入合同数统计",DataTables("工程合同基础数据"))
b.Groups.AddDef("所属区域公司")
b.Groups.AddDef("分公司")
b.Groups.AddDef("项目部")
b.Totals.AddDef("项目部",AggregateEnum.Count,"合同数") '根据项目部列来统计记录数,也就是订单数
dt = b.Build(False) '参数设置为False,生成一个临时表,不在主界面显示
'然后根据统计表生成目录树
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv.BuildTree(dt, "所属区域公司|分公司|项目部")
trv.StopRedraw
For Each nd As WinForm.TreeNode In trv.AllNodes
Dim Qy As Integer = nd.DataRow("所属区域公司")
Dim Fgs As Integer = nd.DataRow("分公司")
Dim Xmb As String = nd.DataRow("项目部")
Select Case nd.Level
Case 0
nd.Text = nd.text & "(" & dt.Compute("Sum(合同数)","所属区域公司 = " & Qy) & ")"
Case 1
nd.Text = nd.text & "(" & dt.Compute("Sum(合同数)","所属区域公司 = " & Qy & " And 分公司 = " & Fgs) & ")"
Case 2
nd.Text = nd.text & "(" & nd.DataRow("合同数") & ")"
End Select
Next
trv.Nodes.Insert("显示所有行(" & dt.Compute("Sum(合同数)") & ")",0)
trv.ResumeRedraw
目录树的NodeMouseDoubleClick事件设为:
Dim Filter As String
Dim dr As DataRow = e.Node.DataRow '获取生成此节点的行
If e.Node.Text <> "显示所有行" Then
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
Tables("工程合同基础数据").Filter = Filter
请老师检查一下以下代码,无法执行,我是按照帮助里做的,帮我修改一下。万分感谢!
|