1、窗口的AfterLoad事件代码改为:
Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.CommandText = "Select Distinct Year(日期) As 年, Month(日期) As 月, 产品 From {订单}"
dt = cmd.ExecuteReader()
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv.BuildTree(dt, "年|月|产品")
trv.Nodes.Insert("显示所有行",0)
上面的代码首先利用SQLCommand生成一个临时表,然后根据这个临时表生成目录树。
临时表包括年、月、产品三列,由于Select语句加上了Distinct关键词,所以提取出来的年、月、日是不重复的。
2、目录树的NodeMouseDoubleClick事件代码改为:
Dim Filter As String = ""
If e.node.Name <> "显示所有行" Then
Dim d1 As Date
Dim d2 As Date
Dim Year As Integer = e.Node.DataRow("年")
Dim Month As Integer = e.Node.DataRow("月")
Dim Product As String = e.Node.DataRow("产品")
Select Case e.Node.Level
Case 0
d1 = New Date(Year,1,1) '取得该年的第一天
d2 = new Date(Year,12,31) '取得该年的最后一天
Filter = "日期 >= #" & d1 & "# And 日期 <= #" & d2 & "#"
Case 1
d1 = New Date(Year, Month, 1) '取得该月的第一天
d2 = new Date(Year, Month, Date.DaysInMonth(Year,Month)) '取得该月的最后一天
Filter = "日期 >= #" & d1 & "# And 日期 <= #" & d2 & "#"
Case 2
d1 = New Date(Year, Month, 1) '取得该月的第一天
d2 = new Date(Year, Month, Date.DaysInMonth(Year,Month)) '取得该月的最后一天
Filter = "日期 >= #" & d1 & "# And 日期 <= #" & d2 & "# And 产品 = '" & Product & "'"
End Select
End If
Tables("订单").Filter = Filter
http://www.foxtable.com/help/topics/0917.htm
这个范例对内部数据表有效,怎么改成对外部数据表有效