DataList的使用(二)自定义分页的实现

Posted on 2004-11-16 16:58  生活即技术  阅读(1021)  评论(0编辑  收藏  举报
Datalist_page.aspx页
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="DataList_Page.aspx.vb" Inherits="Data.DataList_Page"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
    
<HEAD>
        
<title>DataList_Page</title>
        
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
        
<meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE">
        
<meta content="JavaScript" name="vs_defaultClientScript">
        
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    
</HEAD>
    
<body MS_POSITIONING="GridLayout">
        
<form id="Form1" method="post" runat="server">
            
<asp:datalist id="DataList1" Width="40%" style="Z-INDEX: 101; LEFT: 112px; POSITION: absolute; TOP: 56px"
                runat="server" ExtractTemplateRows="True" RepeatColumns="1" CellSpacing="1" BorderStyle="Groove"
                CellPadding="2">
                
<HeaderTemplate>
                
<asp:Table Runat=server  Width="60%">
                
<asp:TableRow  Runat=server >
                   
<asp:TableCell  Runat=server >
                    编号
                   
</asp:TableCell>
                 
<asp:TableCell Runat=server >
                 用户名
                 
</asp:TableCell>
                
</asp:TableRow>
                
</asp:Table>
                
</HeaderTemplate>
                
<ItemTemplate>
                    
<asp:Table Runat="server" Width="60%">
                        
<asp:TableRow Runat="server">
                            
<asp:TableCell Runat="server">
                                
<%# container.dataitem("id") %>
                            
</asp:TableCell>
                            
<asp:TableCell>
                                
<%#container.dataItem("uname")%>
                            
</asp:TableCell>
                        
</asp:TableRow>
                    
</asp:Table>
                
</ItemTemplate>
            
</asp:datalist>
            
<TABLE style="Z-INDEX: 102; LEFT: 120px; WIDTH: 296px; POSITION: absolute; TOP: 328px; HEIGHT: 34px"
                cellSpacing="4" cellPadding="4" width="296">
                
<TR>
                    
<TD><asp:linkbutton id="frist" Runat="server" OnCommand="PagerButtonClick" CommandArgument="Frist">首页</asp:linkbutton>
                        
<asp:linkbutton id="prePage" Runat="server" OnCommand="PagerButtonClick" CommandArgument="pre">上一页</asp:linkbutton>
                        
<asp:linkbutton id="nextPage" Runat="server" OnCommand="PagerButtonClick" CommandArgument="next">下一页</asp:linkbutton>
                        
<asp:linkbutton id="lastPage" Runat="server" OnCommand="PagerButtonClick" CommandArgument="last">尾页</asp:linkbutton></TD>
                
</TR>
            
</TABLE>
            
<asp:label id="Label1" style="Z-INDEX: 103; LEFT: 120px; POSITION: absolute; TOP: 32px" runat="server">Label</asp:label><INPUT id="Current_" style="Z-INDEX: 104; LEFT: 416px; POSITION: absolute; TOP: 208px"
                type="hidden" runat="server"></form>
    
</body>
Datalist_page.aspx.vb页
Public Class DataList_Page
    
Inherits System.Web.UI.Page

#Region 
" Web 窗体设计器生成的代码 "

    '该调用是 Web 窗体设计器所必需的。
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    
End Sub

    
Protected WithEvents DataList1 As System.Web.UI.WebControls.DataList
    
Protected WithEvents frist As System.Web.UI.WebControls.LinkButton
    
Protected WithEvents prePage As System.Web.UI.WebControls.LinkButton
    
Protected WithEvents nextPage As System.Web.UI.WebControls.LinkButton
    
Protected WithEvents lastPage As System.Web.UI.WebControls.LinkButton
    
Protected WithEvents Label1 As System.Web.UI.WebControls.Label
    
Protected WithEvents CurrenPage_ As System.Web.UI.HtmlControls.HtmlInputHidden
    
Protected WithEvents Current_ As System.Web.UI.HtmlControls.HtmlInputHidden

    
'注意: 以下占位符声明是 Web 窗体设计器所必需的。
    '不要删除或移动它。
    Private designerPlaceholderDeclaration As System.Object

    
Private Sub Page_Init(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Init
        
'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
        '不要使用代码编辑器修改它。
        InitializeComponent()
    
End Sub


#
End Region
    
Const Pagesize As Integer = 10
    
Public Totalpage As Int32
    
Dim CurrentPage As Int32
    
Dim TotalCount As Integer
    
Private Sub Page_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load
        
'在此处放置初始化页的用户代码
        If Not IsPostBack Then
            DataList1.DataSource 
= Databind_(0)
            DataList1.DataBind()
            Totalpage 
= GetTotalPage()
            Label1.Text 
= "当前页:1/" & Totalpage
            Current_.Value 
= 1
        
End If
    
End Sub

    
Function Databind_(ByVal StartIndex) As System.Data.DataTable
        
Dim Sqlstr As String = "server=(local);database=Achem56;uid=sa;pwd= "
        Dim Sql As String = "select   id,uname from user_login  "
        Dim Sqlconn As New System.Data.SqlClient.SqlConnection(Sqlstr)
        
Dim Sqlcmd As New System.Data.SqlClient.SqlDataAdapter(Sql, Sqlconn)
        
Dim SqlDataSet As New DataSet
        Sqlcmd.Fill(SqlDataSet, StartIndex, Pagesize, 
"user_login")
        
Return SqlDataSet.Tables("user_login")
    
End Function

    
Function GetTotalPage() As Int64                     '取得总页数
        Dim Sqlstr As String = "server=(local);database=Achem56;uid=tiantian;pwd=tiantian "
        Dim Sql As String = "select   id,uname from user_login order by id desc "
        Dim Sqlconn As New System.Data.SqlClient.SqlConnection(Sqlstr)
        Sqlconn.Open()
        
Dim Sqlcommand As New System.Data.SqlClient.SqlCommand
        Sqlcommand.CommandText 
= "select count(id) from user_login "
        Sqlcommand.Connection = Sqlconn
        TotalCount 
= Sqlcommand.ExecuteScalar
        Sqlconn.Close()
        
If TotalCount Mod Pagesize <> 0 Then
            GetTotalPage 
= TotalCount \ Pagesize + 1
        
Else
            GetTotalPage 
= TotalCount \ Pagesize
        
End If
    
End Function

    
Sub PagerButtonClick(ByVal send As ObjectByVal e As CommandEventArgs)   '上一页,下一页,首页,尾页的处理
        Dim Current_Page As Int32 = CInt(Current_.Value)
        Totalpage 
= GetTotalPage()
        
Select Case e.CommandArgument
            
Case "Frist"
                DataList1.DataSource = Databind_(0)
                DataList1.DataBind()
                Label1.Text 
= "当前页:1 / " & Totalpage
                Current_.Value 
= 1
            
Case "pre"
                If Current_Page > 1 Then
                    Current_Page 
= Current_Page - 1
                    Label1.Text 
= "当前页:" & Current_Page & "/" & Totalpage
                    DataList1.DataSource 
= Databind_((Current_Page - 1* Pagesize)
                    DataList1.DataBind()
                    Current_.Value 
= Current_Page.ToString
                
End If
            
Case "next"
                If Current_Page < Totalpage Then
                    Current_Page 
= Current_Page + 1
                    Label1.Text 
= "当前页:" & Current_Page & "/" & Totalpage
                    DataList1.DataSource 
= Databind_((Current_Page - 1* Pagesize)
                    DataList1.DataBind()
                    Current_.Value 
= Current_Page.ToString
                
End If
            
Case "last"
                Label1.Text = "当前页:" & Totalpage & "/" & Totalpage
                DataList1.DataSource 
= Databind_((Totalpage - 1* Pagesize)
                DataList1.DataBind()
                Current_.Value 
= Totalpage
        
End Select
    
End Sub

End Class
 今天终于实现了DataGrid、DataList的自定义分页,其实Reapeater实现的方法是一样的。
关键是adapter.fill(ds,StartRecord,size,"表名")
StartRecord 是开始的记录号。计算方法是 (页数-1)*页的大小
size 是每页的大小