Saturday, July 18, 2009

Paging in Repeater

0 comments
Heres a sample on how to implement Paging on a Repeater.

The Output



The ASPX

<asp:Repeater ID="rptrProducts" runat="server">
<HeaderTemplate>
<table border="1">
<tr style="background-color:Gray;">
<td>
Product Name
</td>
<td>
Quantity Per Unit
</td>
<td>
Units On Order
</td>
<td>
Discontinued
</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Label ID="lblProductName" runat="server" Text='<%#Eval("ProductName") %>'></asp:Label>
</td>
<td>
<asp:Label ID="lblQuantityPerUnit" runat="server" Text='<%#Eval("QuantityPerUnit") %>'></asp:Label>
</td>
<td>
<asp:Label ID="lblUnitsOnOrder" runat="server" Text='<%#Eval("UnitsOnOrder") %>'></asp:Label>
</td>
<td>
<asp:CheckBox ID="chkDiscontinued" runat="server" Checked='<%#Eval("Discontinued") %>'
Enabled="false" />
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
<tr align="right" style="background-color:Gray;">
<td colspan="4">
<asp:LinkButton ID="lnkFirst" runat="server"
ForeColor="Black"
Text="First" onclick="lnkFirst_Click">
</asp:LinkButton>&nbsp;
<asp:LinkButton ID="lnkPrevious" runat="server"
ForeColor="Black"
Text="Previous"
OnClick="lnkPrevious_Click">
</asp:LinkButton>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Now Showing Page&nbsp;
<asp:DropDownList ID="ddlpageNumbers" runat="server"
AutoPostBack="true"
OnSelectedIndexChanged="ddlpageNumbers_SelectedIndexChanged">
</asp:DropDownList>&nbsp;of&nbsp;
<asp:Label ID="lblTotalPages" runat="server">
</asp:Label>&nbsp;Pages.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<asp:LinkButton ID="lnkNext" runat="server"
ForeColor="Black"
Text="Next" onclick="lnkNext_Click">
</asp:LinkButton>&nbsp;
<asp:LinkButton ID="lnkLast" runat="server"
ForeColor="Black"
Text="Last" onclick="lnkLast_Click">
</asp:LinkButton>
</td>
</tr>
</table>


The ASPX.CS

public partial class Repeaters_Paging : System.Web.UI.Page
{
#region "Local Variables and Declarations"

private const bool blnAllowPaging = true;
private const int iPageSize = 10;

private static PagedDataSource pgdProducts = new PagedDataSource();

#endregion

#region "Page Load Event"

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindRepeater();
}
}

#endregion

#region "Footer LinkButtons"

protected void lnkFirst_Click(object sender, EventArgs e)
{
ThisPageNumber = 0;
BindRepeater();
}

protected void lnkPrevious_Click(object sender, EventArgs e)
{
--ThisPageNumber;
BindRepeater();
}

protected void lnkNext_Click(object sender, EventArgs e)
{

++ThisPageNumber;
BindRepeater();
}

protected void lnkLast_Click(object sender, EventArgs e)
{
ThisPageNumber = pgdProducts.PageCount - 1;
BindRepeater();
}

#endregion

#region "Footer DropDownList"

protected void ddlpageNumbers_SelectedIndexChanged(object sender, EventArgs e)
{
ThisPageNumber = ddlpageNumbers.SelectedIndex;
BindRepeater();
}

#endregion

#region "Custom Functions"

private void BindRepeater()
{
pgdProducts.AllowPaging = blnAllowPaging;
pgdProducts.PageSize = iPageSize;
pgdProducts.DataSource = GetProductsDataView();

pgdProducts.CurrentPageIndex = ThisPageNumber;
lblTotalPages.Text = pgdProducts.PageCount.ToString();
FillPagesDropDownList(pgdProducts.PageCount);

lnkFirst.Enabled = !pgdProducts.IsFirstPage;
lnkPrevious.Enabled = !pgdProducts.IsFirstPage;
lnkNext.Enabled = !pgdProducts.IsLastPage;
lnkLast.Enabled = !pgdProducts.IsLastPage;
ddlpageNumbers.SelectedIndex = pgdProducts.CurrentPageIndex;

rptrProducts.DataSource = pgdProducts;
rptrProducts.DataBind();
}

private DataView GetProductsDataView()
{
DataTable dtProductsTemp = new DataTable();
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString))
{
using (SqlDataAdapter adapProducts = new SqlDataAdapter("Select * from Products", conn))
{
adapProducts.Fill(dtProductsTemp);
}
}
return dtProductsTemp.DefaultView;

}

private void FillPagesDropDownList(int iTotalPages)
{
ddlpageNumbers.Items.Clear();
for (int i = 1; i <= iTotalPages; i++)
{
ddlpageNumbers.Items.Add(new ListItem(i.ToString(), i.ToString()));
}
}

#endregion

#region "Properties"

private int ThisPageNumber
{
get
{
object obj = ViewState["ThisPageNumber"];
return (obj == null) ? 0 : (int)obj;
}
set
{
this.ViewState["ThisPageNumber"] = value;
}
}

#endregion

}

Extra Namespace used

using System.Data.SqlClient;

P.S: DataBase used is Northwind
Read more...