<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Pageing1.ascx.cs" Inherits="EB.Mall.Services.UI.Web.Pageing1" %>
<style type="text/css">
    ul {
        list-style:none;   
             
    }
     ul li
    {
        float:left; /* 向左漂移,将竖排变为横排 */
    }
</style>
<div id="divMain" runat="server" style="text-align:center;">
<input type="hidden" runat="server" id="hidPageIndex" value="0"/>
<input type="hidden" runat="server" id="hidPageCount" value="0"/>
<input type="hidden" runat="server" id="hidToPage" value="0"/>
<asp:Repeater ID="rptPageing" runat="server" OnItemDataBound="rptPageing_ItemDataBound">
    <HeaderTemplate>
        <ul>   
            <li>
                <asp:LinkButton ID="linkFirst" CommandArgument="f" OnCommand="linkFirst_Command" runat="server">首页</asp:LinkButton>
            </li>
            <li>
                <asp:LinkButton ID="linkPrev" CommandArgument="p" OnCommand="linkFirst_Command"  runat="server">上一页</asp:LinkButton>
            </li>
    </HeaderTemplate>
    <ItemTemplate>
            <li>
                <asp:LinkButton ID="linkItem" CommandArgument="i" OnCommand="linkFirst_Command" CommandName=""  runat="server"><%#Container.DataItem %></asp:LinkButton>
            </li>
    </ItemTemplate>
    <FooterTemplate>
            <li>
                <asp:LinkButton ID="linkNext" CommandArgument="n" OnCommand="linkFirst_Command"  runat="server">下一页</asp:LinkButton>
            </li>
            <li>
                <asp:LinkButton ID="linkLast" CommandArgument="l" OnCommand="linkFirst_Command"  runat="server">末页</asp:LinkButton>
            </li>
            <li>
                <asp:Label ID="lblStatistic"  runat="server"></asp:Label>
            </li>
            <li>
               转到第
                <asp:TextBox ID="txtToPage" Width="25" Height="12" runat="server"></asp:TextBox>页
                <asp:Button ID="btnToPage" runat="server" Text="确定" OnClick="btnToPage_Click" OnClientClick="return onClientClick(this);" />                
            </li>
       </ul>
    </FooterTemplate>
</asp:Repeater>
</div>
<script type="text/javascript">
    function onClientClick(obj)
    {
        var toPageIndex= obj.previousElementSibling.value;
        var toPageIndex
        try
        {
            var toPageIndex=parseInt(obj.previousElementSibling.value);
            var totalCount=parseInt(document.getElementById("<%=hidPageCount.ClientID%>").value );
            if(!toPageIndex||toPageIndex<=0||toPageIndex>totalCount)
            {
                alert("页码输入错误!");
                return false;
            }
        }
        catch(e){}       
        
        document.getElementById("<%=hidToPage.ClientID%>").value = obj.previousElementSibling.value;
        return true;
    }
</script>

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace EB.Mall.Services.UI.Web
{
    public partial class Pageing1 : System.Web.UI.UserControl
    {
        public class PageingEventArgs
        {
            public PageingEventArgs(int pageIndex)
            {
                this.pageIndex = pageIndex;
            }
            private int pageIndex = 0;
            public int PageIndex
            {
                get
                {
                    return this.pageIndex;
                }
            }
        }
        public delegate void PageingHandler(object obj, PageingEventArgs e, out int pageCount);
        public event PageingHandler OnPageing;
        private int showPageCount = 5;
        protected void Page_Load(object sender, EventArgs e)
        {
            if(!IsPostBack&&this.loadShow)
            {
                GoFirstPage();
            }
        }
        public void GoFirstPage()
        {
            PageingMethod(1);
        }
        public void GoPage(int pageIndex)
        {
            PageingMethod(pageIndex);
        }
        private void PageingMethod(int pageIndex)
        {
            int pageCount = 0;
            if (OnPageing != null)
            {
                OnPageing(this, new PageingEventArgs(pageIndex), out pageCount);
                if (pageCount <= 0)
                {
                    this.divMain.InnerText = "暂无数据";
                }
                else
                {
                    this.PageIndex = pageIndex;
                    int bs = this.PageIndex % showPageCount;
                    int startIndex = 0;
                    if (bs == 0)
                    {
                        startIndex = this.PageIndex - 4;
                        if (startIndex <= 0)
                        {
                            startIndex = 1;
                        }
                    }
                    else
                    {
                        startIndex = (this.PageIndex / showPageCount) * showPageCount + 1;
                    }
                    int endIndex = startIndex + 4;
                    if (endIndex > pageCount)
                    {
                        endIndex = pageCount;
                    }
                    List<int> itemList = new List<int>();
                    for (int i = startIndex; i <= endIndex; i++)
                    {
                        itemList.Add(i);
                    }
                    this.PageCount = pageCount;
                    this.rptPageing.DataSource = itemList;
                    this.rptPageing.DataBind();
                }


            }
        }
        private bool loadShow = false;
        /// <summary>
        /// 是否页面首次进入不点查询就要显示数据
        /// </summary>
        public bool LoadShow
        {
            set
            {
                loadShow = value;
            }
        }
        /// <summary>
        /// 当前页
        /// </summary>
        public int PageIndex
        {
            get
            {
                int pageIndex = 0;
                int.TryParse(this.hidPageIndex.Value, out pageIndex);
                return pageIndex;
            }
            set
            {
                this.hidPageIndex.Value = value.ToString();
            }
        }
        /// <summary>
        /// 页数
        /// </summary>
        public int PageCount
        {
            get
            {
                int pagecount = 0;
                int.TryParse(this.hidPageCount.Value, out pagecount);
                return pagecount;
            }
            set
            {
                this.hidPageCount.Value = value.ToString();
            }
        }

        protected void rptPageing_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Header)
            {
                LinkButton linkFirst = e.Item.FindControl("linkFirst") as LinkButton;
                LinkButton linkPrev = e.Item.FindControl("linkPrev") as LinkButton;
                if (PageIndex == 1)
                {
                    linkFirst.Enabled = false;
                    linkPrev.Enabled = false;
                }
                else
                {
                    linkFirst.Enabled = true;
                    linkPrev.Enabled = true;
                }
            }
            else if (e.Item.ItemType == ListItemType.Footer)
            {
                LinkButton linkLast = e.Item.FindControl("linkLast") as LinkButton;
                LinkButton linkNext = e.Item.FindControl("linkNext") as LinkButton;
                if (PageIndex == PageCount)
                {
                    linkLast.Enabled = false;
                    linkNext.Enabled = false;
                }
                else
                {
                    linkLast.Enabled = true;
                    linkNext.Enabled = true;
                }
                Label lblStatistic = e.Item.FindControl("lblStatistic") as Label;
                lblStatistic.Text = string.Format("共{0}页",PageCount);
            }
            else if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {

                LinkButton linkItem = e.Item.FindControl("linkItem") as LinkButton;
                linkItem.Text = e.Item.DataItem.ToString();
                if ((int)e.Item.DataItem == PageIndex)
                {
                    linkItem.Enabled = false;
                }
                else
                {
                    linkItem.Enabled = true;
                }
            }
        }
        protected void linkFirst_Command(object sender, CommandEventArgs e)
        {
            LinkButton linkb = sender as LinkButton;
            string type = e.CommandArgument.ToString();
            switch (type)
            {
                case "f":
                    PageingMethod(1);
                    break;
                case "p":
                    PageingMethod(this.PageIndex - 1);
                    break;
                case "n":
                    PageingMethod(this.PageIndex + 1);
                    break;
                case "l":
                    PageingMethod(this.PageCount);
                    break;
                case "i":
                    PageingMethod(Convert.ToInt32(linkb.Text));
                    break;
            }

        }

        protected void btnToPage_Click(object sender, EventArgs e)
        {
            if(this.rptPageing.Items.Count<=0)
            {
                return;
            }            
            int pIndex=0;
            int.TryParse(this.hidToPage.Value,out pIndex);
            GoPage(pIndex);
        }
    }
}

 下面是调用方法:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="EB.Mall.Services.UI.Web.WebForm2" %>

<%@ Register Src="~/Pageing1.ascx" TagPrefix="uc1" TagName="Pageing1" %>


<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="Button1" runat="server" Text="查询" OnClick="Button1_Click" />
        <uc1:Pageing1 runat="server" id="Pageing1" OnOnPageing="Pageing1_OnPageing" LoadShow="true" />
    </div>
    </form>
</body>
</html>

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace EB.Mall.Services.UI.Web
{
    public partial class WebForm2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            
        }
        protected void Pageing1_OnPageing(object obj, Pageing1.PageingEventArgs e, out int pageCount)
        {
            int pageIndex = e.PageIndex;
            //分解页面获取数据
            pageCount = 20;
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            //不用获取数据,只写这一句就行
            this.Pageing1.GoFirstPage();
        }
    }
}