Datalist_page.aspx页
Datalist_page.aspx.vb页
今天终于实现了DataGrid、DataList的自定义分页,其实Reapeater实现的方法是一样的。
关键是adapter.fill(ds,StartRecord,size,"表名")
StartRecord 是开始的记录号。计算方法是 (页数-1)*页的大小
size 是每页的大小
<%@ 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>
<!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>
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.Object, ByVal 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.Object, ByVal 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 Object, ByVal 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
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.Object, ByVal 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.Object, ByVal 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 Object, ByVal 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
关键是adapter.fill(ds,StartRecord,size,"表名")
StartRecord 是开始的记录号。计算方法是 (页数-1)*页的大小
size 是每页的大小