in aspx page drag and drop a repeater control from toolbox
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Perfect Pagination With Repeater and ASP.Net C#</title>
<link href="admin/css/stylesheet.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="MainScriptManager" runat="server" />
<asp:UpdatePanel ID="pnlHelloWorld" runat="server">
<ContentTemplate>
<div>
<asp:Repeater ID="rptResult" runat="server">
<HeaderTemplate>
<table class="mGrid">
<tr class="mGrid table_head">
<th>
ID
</th>
<th>
Name
</th>
<th>
Address
</th>
<th>
Created Date
</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<%#Eval("PageId") %>
</td>
<td>
<%#Eval("PageName") %>
</td>
<td>
<%#Eval("Section") %>
</td>
<td>
<%#Eval("Department") %>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
<tr>
<td
colspan="4"><asp:Label
Visible='<%#bool.Parse((Repeater1.Items.Count==0).ToString())%>'
runat="server" ID="lblNoRecord" Text="No Record Found!"
ForeColor="Red"></asp:Label></td>
</tr>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
<div style="margin-top: 20px;">
<asp:Label ID="lblpage" runat="server" Text=""></asp:Label>
<table>
<tr class="mGrid table_head">
<td>
<asp:LinkButton ID="lbFirst"
runat="server" OnClick="lbFirst_Click">First</asp:LinkButton>
</td>
<td>
<asp:LinkButton ID="lbPrevious"
runat="server"
OnClick="lbPrevious_Click">Previous</asp:LinkButton>
</td>
<td>
<asp:DataList ID="rptPaging" runat="server" OnItemCommand="rptPaging_ItemCommand"
OnItemDataBound="rptPaging_ItemDataBound" RepeatDirection="Horizontal" RepeatLayout="Table">
<ItemTemplate>
<asp:LinkButton ID="lbPaging"
runat="server" CommandArgument='<%# Eval("PageIndex") %>'
CommandName="newPage" Text='<%# Eval("PageText") %>'>
</asp:LinkButton>
</ItemTemplate>
</asp:DataList>
</td>
<td>
<asp:LinkButton ID="lbNext" runat="server" OnClick="lbNext_Click">Next</asp:LinkButton>
</td>
<td>
<asp:LinkButton ID="lbLast" runat="server" OnClick="lbLast_Click">Last</asp:LinkButton>
</td>
</tr>
</table>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
in Code Behind [aspx.cs] page
readonly PagedDataSource _pgsource = new PagedDataSource();
int _firstIndex, _lastIndex;
private int _pageSize = 10;
private int CurrentPage
{
get
{
if (ViewState["CurrentPage"] == null)
{
return 0;
}
return ((int)ViewState["CurrentPage"]);
}
set
{
ViewState["CurrentPage"] = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack) return;
BindDataIntoRepeater();
}
// Get data from database/repository
static DataTable GetDataFromDb()
{
string query = "Select * from Page";
DataTable dt = connection.getDatatbl(query);
return dt;
}
// Bind PagedDataSource into Repeater
private void BindDataIntoRepeater()
{
var dt = GetDataFromDb();
_pgsource.DataSource = dt.DefaultView;
_pgsource.AllowPaging = true;
// Number of items to be displayed in the Repeater
_pgsource.PageSize = _pageSize;
_pgsource.CurrentPageIndex = CurrentPage;
// Keep the Total pages in View State
ViewState["TotalPages"] = _pgsource.PageCount;
// Example: "Page 1 of 10"
lblpage.Text = "Page " (CurrentPage 1) " of " _pgsource.PageCount;
// Enable First, Last, Previous, Next buttons
lbPrevious.Enabled = !_pgsource.IsFirstPage;
lbNext.Enabled = !_pgsource.IsLastPage;
lbFirst.Enabled = !_pgsource.IsFirstPage;
lbLast.Enabled = !_pgsource.IsLastPage;
// Bind data into repeater
rptResult.DataSource = _pgsource;
rptResult.DataBind();
// Call the function to do paging
HandlePaging();
}
private void HandlePaging()
{
var dt = new DataTable();
dt.Columns.Add("PageIndex"); //Start from 0
dt.Columns.Add("PageText"); //Start from 1
_firstIndex = CurrentPage - 5;
if (CurrentPage > 5)
_lastIndex = CurrentPage 5;
else
_lastIndex = 10;
// Check last page is greater than total page then reduced it
// to total no. of page is last index
if (_lastIndex > Convert.ToInt32(ViewState["TotalPages"]))
{
_lastIndex = Convert.ToInt32(ViewState["TotalPages"]);
_firstIndex = _lastIndex - 10;
}
if (_firstIndex < 0)
_firstIndex = 0;
// Now creating page number based on above first and last page index
for (var i = _firstIndex; i < _lastIndex; i )
{
var dr = dt.NewRow();
dr[0] = i;
dr[1] = i 1;
dt.Rows.Add(dr);
}
rptPaging.DataSource = dt;
rptPaging.DataBind();
}
protected void lbFirst_Click(object sender, EventArgs e)
{
CurrentPage = 0;
BindDataIntoRepeater();
}
protected void lbLast_Click(object sender, EventArgs e)
{
CurrentPage = (Convert.ToInt32(ViewState["TotalPages"]) - 1);
BindDataIntoRepeater();
}
protected void lbPrevious_Click(object sender, EventArgs e)
{
CurrentPage -= 1;
BindDataIntoRepeater();
}
protected void lbNext_Click(object sender, EventArgs e)
{
CurrentPage = 1;
BindDataIntoRepeater();
}
protected void rptPaging_ItemCommand(object source, DataListCommandEventArgs e)
{
if (!e.CommandName.Equals("newPage")) return;
CurrentPage = Convert.ToInt32(e.CommandArgument.ToString());
BindDataIntoRepeater();
}
protected void rptPaging_ItemDataBound(object sender, DataListItemEventArgs e)
{
var lnkPage = (LinkButton)e.Item.FindControl("lbPaging");
if (lnkPage.CommandArgument != CurrentPage.ToString()) return;
lnkPage.Enabled = false;
lnkPage.Attributes.Add("style", "text-align:center;");
}