设计带分页的加载树
本节内容参考CaseStudy目录下的示例文件:分页加载树.table
上一节已经讲述如何自行编码设计加载树。
这一节更进一步,在加载树的基础上加上分页加载:
设计步骤
1、这个示例文件使用的是外部数据源,数据文件为CaseStudy“订单.mdb”。
2、首先为了初始不加载任何数据,我们在BeforeLoadOuterTable事件中设置代码:
If
e.DataTableName
= "订单" Then
e.SelectString
= "Select * From 订单 Where [编号]
Is Null"
End
If
提示: 这个订单表的主键并非我们常用的"_Identify",而是一个名为"编号"的自动增量列,因为主键不可能为空,所以上述代码使得打开项目后,订单表不会加载任何数据。
3、设计好一个下图所示的窗口,注意要合理设置各个控件的锚定属性,确保窗口大小发生变化的时候,各控件依然能显示在正确的位置上,各控件的锚定设置如下图:
你可能留意到各按钮的外观和常规的按钮不一样,设计这种平面按钮很简单,只需将按钮的类型设置为Flat,并将边框厚度设置为0。
4、设置窗口的AfterLoad事件代码为:
'生成目录树
Dim cmd
As New
SQLCommand
Dim
dt As
DataTable
cmd.ConnectionName
= "test"
cmd.CommandText
= "SELECT DISTINCT 产品,客户 From
{订单}"
dt =
cmd.ExecuteReader()
Dim
trv As
WinForm.TreeView
= e.Form.Controls("TreeView1")
trv.BuildTree(dt,"产品|客户")
trv.Nodes.Insert("加载所有数据",0)
'加载第一页数据
With
DataTables("订单")
.LoadFilter = ""
'清除加载条件
.LoadPage
= 0 '加载第一页
.LoadTop =
5 '每页5行
.Load()
e.Form.Controls("TextBox1").Value
= 1 &
"/" & .TotalPages
End
With
5、设置目录树的NodeMouseDoubleClik事件代码为:
Dim
Filter As
String
If
e.node.Text
= "加载所有数据" Then
Filter =
""
Else
Dim dr
As DataRow =
e.Node.DataRow
Select
Case e.Node.Level
Case 0
Filter ="[产品]
= '"
& dr("产品")
& "'"
Case 1
Filter ="[产品]
= '"
& dr("产品")
&
"' And [客户]
= '"
& dr("客户")
& "'"
End
Select
End
If
With
DataTables("订单")
.LoadFilter =
Filter '设置加载条件
.LoadPage = 0
'加载第一页
.LoadTop = 5
'每页5行
.Load()
e.Form.Controls("TextBox1").Value
= 1 &
"/" & .TotalPages
End
With
6、设置各分页按钮的代码:
按钮 | 代码 |
第一页 |
With
DataTables("订单") |
上一页 |
With
DataTables("订单") |
下一页 |
With
DataTables("订单") |
最末页 |
With
DataTables("订单") |