设计带分页的加载树

本节内容参考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("订单")
    .LoadPage = 0 '加载第一页
    .Load()
    e.Form.Controls("TextBox1").Value = 1 & "/" & .
TotalPages

End
With

上一页

With DataTables("订单")
    If .LoadPage > 0 Then
        .LoadPage  = .LoadPage - 1
        .Load()
        e.Form.Controls("TextBox1").Value = (.LoadPage + 1) & "/" & .TotalPages
    End
If

End
With

下一页

With DataTables("订单")
    If .LoadPage < .TotalPages - 1
        .LoadPage = .LoadPage  + 1
        .Load()
        e.Form.Controls("TextBox1").Value = (.LoadPage + 1) & "/" & .TotalPages
    End
If

End
With

最末页

With DataTables("订单")
    If .LoadPage < .TotalPages - 1
        .LoadPage  = .TotalPages - 1
        .Load()
        e.Form.Controls("TextBox1").Value = .TotalPages & "/" & .TotalPages
    End
If

End
With


本页地址:http://www.foxtable.com/webhelp/topics/2692.htm