using System;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace myControls
{
public class Pager : WebControl, IPostBackEventHandler
{
string _controlToPage;
public string ControlToPage
{
get { return _controlToPage; }
set { _controlToPage = value; }
}
protected override void RenderContents(HtmlTextWriter writer)
{
GridView grid = GetControlToPage();
for (int i = 0; i < grid.PageCount; i++)
{
string eRef = Page.ClientScript.GetPostBackClientHyperlink(this, i.ToString());
writer.Write("[");
if (i == grid.PageIndex)
writer.AddStyleAttribute(HtmlTextWriterStyle.FontWeight, "bold");
writer.AddAttribute(HtmlTextWriterAttribute.Href, eRef);
writer.RenderBeginTag(HtmlTextWriterTag.A);
writer.Write("{0}", i + 1);
writer.RenderEndTag();
writer.Write("] ");
}
}
private GridView GetControlToPage()
{
if (String.IsNullOrEmpty(_controlToPage))
throw new Exception("Must set ControlToPage property");
return (GridView)Page.FindControl(_controlToPage);
}
public void RaisePostBackEvent(string eventArgument)
{
GridView grid = GetControlToPage();
grid.PageIndex = Int32.Parse(eventArgument);
}
}
}
File: Default.aspx
<%@ Page Language="C#" %>
<%@ Register TagPrefix="custom" Namespace="myControls" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Show CustomPager</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView
id="GridView1"
DataSourceID="srcProducts"
AllowPaging="true"
PageSize="3"
PagerSettings-Visible="false"
Runat="server" />
<custom:Pager
id="Pager1"
ControlToPage="GridView1"
Runat="server" />
<asp:SqlDataSource
id="srcProducts"
ConnectionString="Data Source=.\SQLExpress;Integrated Security=True;
AttachDbFileName=|DataDirectory|MyDatabase.mdf;User Instance=True"
SelectCommand="SELECT Id,Title,Director FROM Products"
Runat="server" />
</div>
</form>
</body>
</html>