<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Pager.ascx.cs" Inherits="UserControl_Pager" %>
<p>
第<asp:Label ID="currentPage" runat="server" />页,
共<asp:Label ID="howManyPages" runat="server" />页
<asp:HyperLink ID="startLink" runat="server">首页</asp:HyperLink>
<asp:HyperLink ID="previousLink" runat="server">上一页</asp:HyperLink>
<asp:Repeater ID="pagesRepeater" runat="server">
<ItemTemplate>
<asp:HyperLink ID="hyperlink" runat="server" Text='<%# Eval("Page") %>' NavigateUrl='<%# Eval("Url") %>' />
</ItemTemplate>
</asp:Repeater>
<asp:HyperLink ID="nextLink" runat="server">下一页</asp:HyperLink>
<asp:HyperLink ID="endLink" runat="server">尾页</asp:HyperLink>
</p>
using System;
//用于数据源的结构
public struct PageUrl
{
private string page;
private string url;
public string Page
{
get { return page; }
}
public string Url
{
get { return url; }
}
public PageUrl(string page, string url)
{
this.page = page;
this.url = url;
}
}
public partial class UserControl_Pager : System.Web.UI.UserControl
{
//暴露的属性
public int CurPage { set; get; }
public int HowManyPages { set; get; }
public string PageUrlFormat { set; get; }
protected void Page_Load(object sender, EventArgs e)
{
//根据暴露的属性填充属性
currentPage.Text = CurPage.ToString();
howManyPages.Text = HowManyPages.ToString();
//如果多余一页
//如果是第一页
if (CurPage == 1)
{
startLink.Visible = false;
previousLink.Visible = false;
}
//如果是最后一页
if (CurPage == HowManyPages)
{
endLink.Visible = false;
nextLink.Visible = false;
}
//设置导航链接的url
startLink.NavigateUrl = String.Format(PageUrlFormat, 1);
previousLink.NavigateUrl = String.Format(PageUrlFormat, CurPage - 1);
nextLink.NavigateUrl = String.Format(PageUrlFormat, CurPage + 1);
endLink.NavigateUrl = String.Format(PageUrlFormat, HowManyPages);
//设置中间数字区域的导航url
PageUrl[] pages = new PageUrl[HowManyPages];
for (int i = 1; i <= HowManyPages; i++)
{
pages[i - 1] = new PageUrl(i.ToString(), String.Format(PageUrlFormat, i));
}
//取消当前页的URL
pages[CurPage - 1] = new PageUrl(CurPage.ToString(), "");
//向pagesRepeater绑定数据
pagesRepeater.DataSource = pages;
pagesRepeater.DataBind();
}
}
CREATE PROCEDURE GetMoviesAndSource
@Start int,
@Count int,
@HowManyMovies int output
AS
BEGIN
DECLARE @Movies TABLE
(
RowNumber INT,
ID INT,
Title TEXT,
Description NTEXT,
Image VARCHAR(20),
FileSize VARCHAR(10),
Format VARCHAR(5),
LinkRate TINYINT,
Resolution VARCHAR(15),
Duration VARCHAR(10),
Definition TINYINT,
Published DATETIME,
CodeRate SMALLINT,
FileCount TINYINT
)
INSERT INTO @Movies
SELECT ROW_NUMBER() OVER (ORDER BY Movie.ID DESC), Movie.ID, Title, Description, Image,
FileSize, Format, LinkRate, Resolution, Duration, Definition, Published, CodeRate, FileCount
FROM Movie INNER JOIN MovieSource ON Movie.ID = MovieSource.ID
SELECT @HowManyMovies = COUNT(ID) FROM @Movies
SELECT ID, Title, Description, Image,
FileSize, Format, LinkRate, Resolution, Duration, Definition, Published, CodeRate, FileCount
FROM @Movies
WHERE RowNumber > (@Start - 1) * @Count
AND RowNumber <= @Start * @Count
END