1、然后新建一个窗口,窗口中插入一个目录树(TreeView),窗口的AfterLod事件代码设为:
Dim cmd As New SQ-LCommand
Dim dt As DataTable
cmd.CommandText = "SELEC-T DISTINCT 产品,客户 From {订单}"
dt = cmd.ExecuteReader()
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv.BuildTree(dt,"产品|客户")
trv.Nodes.Insert("加载所有数据",0)
这样一旦打开窗口,该目录树列出所有的产品和客户。
由于订单表只是加载了部分数据,所以我们不能直接根据订单表来生成目录树,因为订单表的数据不完整,只能用ExecuteReader方法直接从后台提取完整的产品和客户数据。
注意Select语句中,一定要有DISTINCT关键词,这样返回的才是不重复的产品和客户名单,虽然对目录树的生成没有影响,但是会大大降低数据加载量,对于网络环境,这是非常重要的。
2、最后将目录树的NodeMouseDoubleClick事件设为:
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()
这样我们只需双击某个节点,既可动态加载对应的订单。
目录树右边的数据,如何实现显示目录树的条件的数据,如上面代码,以产品和客户为目录,由于不涉及雇员、折扣列,让这两列的数据不显示?
如图
此主题相关图片如下:目录树显示.jpg