分页显示后台数据

上一节我们实现分页显示已经加载到DataTable中的数据。

这一节介绍如何分页显示未加载的数据,在给出具体代码之前,我先给大家一些建议:

1、如果服务端的数据量比较小,将数据加载进来,可以提高处理速度。

2、如果服务端数据量比较大,加载全部数据,可能会耗尽内存,甚至导致系统崩溃。

3、怎样才算小,怎样才算大,这没有标准,请以实际运行效果为准,一般不建议服务端加载超过5万行的数据。

4、如果某个表虽然不加载数据,但是需要对这个表进行增加、删除和修改等操作,那么建议加载这个表的结构,这样就可以利用后台数据处理函数简化代码。

5、建议使用SQL Server作为数据源,容量更大,性能更好,而且SQL Server有Row_Number函数,分页加载方便很多。

完整示例

下面的HttpRequest事件,用于分页显示后台数据,这里假定你使用的是SQL Server作为数据源:

Select Case e.Path
    Case "list.htm"
        Dim page As Integer = 0
'
默认page为0,显示第一页
        Dim pageRows As Integer = 10
'
每页10
        If e.GetValues.ContainsKey("page") Then 
'
如果地址中有page参数
            Integer.TryParse(e.GetValues("page"), page)
'
提取page参数
        End If
        Dim StartRow As Integer = page * pageRows
'
此页第一行
        Dim EndRow As Integer = (page + 1) * pageRows - 1
'
此页最后一行
        Dim cmd As New SQLCommand
        cmd.ConnectionName = "orders"
'
记得设置数据源名称
        cmd.CommandText =
"Select Count(*) From {
订单}"
        Dim Count As Integer = cmd.ExecuteScalar()
'
获取总的行数
        cmd.CommandText =
"Select *, [
数量]*[单价]*(1-[折扣]) As 金额 From (Select Row_Number() Over(Order by [日期]) As RowNum, * From 订单) As a "
        cmd.CommandText = cmd.CommandText & "  Where RowNum >= " & StartRow & " And RowNum <= " & EndRow
        Dim dt As DataTable = cmd.ExecuteReader
'
获取该页数据
        Dim sb As New StringBuilder
        Dim nms() As String =
{"
产品","客户","数量","单价","折扣","金额","日期"}
        sb.AppendLine("<Table border='1'>")
        sb.AppendLine(
"<caption>
订单浏览<caption></br>")
        sb.Append("<tr>")
        For Each nm As String In nms
            sb.Append("<td>" & nm & "</td>")
        Next
        sb.AppendLine("</tr>")
        For Each r As DataRow In dt.DataRows
            sb.Append("<tr>")
            For Each nm As String In nms
                sb.Append("<td>" & r(nm) & "</td>")
            Next
            sb.AppendLine("</tr>")
        Next
        sb.AppendLine("</Table></br></br>")
        If page > 0 Then
            sb.Append("<a href='list.htm?page=" & page - 1 &
"'>
上一页</a> ")
        End If
        If EndRow < Count -1 Then
            sb.Append("<a href='list.htm?page=" & page + 1 &
"'>
下一页 </a>" )
        End If
        e.WriteString(sb.ToString)

End
Select


本页地址:http://www.foxtable.com/mobilehelp/topics/0036.htm