using repeater control to display list<data> and paging
aspx :
<form id="form1" runat="server">
<div>
<asp:Repeater runat="server" ID="rptTest">
<HeaderTemplate>
<table border="1" width="60%">
<tr style="background-color: #1e90ff">
<th>
</th>
<th>
Id
</th>
<th>
Name
</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr style="background-color: #008000">
<td>
<asp:CheckBox runat="server" ID="chkRptItem" />
</td>
<td>
<asp:Label ID="lblRptItem_Id" runat="server" Text = <%#Eval("Id")%> ></asp:Label>
</td>
<td>
<asp:Label runat="server" ID="lblRptItem_Name" Text=<%#Eval("Name")%>></asp:Label>
</td>
</tr>
</ItemTemplate>
<AlternatingItemTemplate>
<tr style="background-color: #00bfff">
<td>
<asp:CheckBox runat="server" ID="chkRptItem" />
</td>
<td>
<asp:Label ID="lblRptItem_Id" runat="server" Text = <%#Eval("Id")%> ></asp:Label>
</td>
<td>
<asp:Label runat="server" ID="lblRptItem_Name" Text=<%#Eval("Name")%>></asp:Label>
</td>
</tr>
</AlternatingItemTemplate>
<SeparatorTemplate>
<tr style="background-color: #008b8b">
<td></td>
<td>-----------
</td>
<td>-----------
</td>
</tr>
</SeparatorTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
<div id="rptPageArea">
<span>Page Size: </span>
<asp:DropDownList runat="server" ID="ddlPageSize">
<asp:ListItem Text="5" Value="5" Selected="True"></asp:ListItem>
<asp:ListItem Text="10" Value="10"></asp:ListItem>
<asp:ListItem Text="15" Value="15"></asp:ListItem>
<asp:ListItem Text="20" Value="20"></asp:ListItem>
</asp:DropDownList>
<div>
<asp:Label runat="server" ID="lblCurrentPageNo"></asp:Label>
Of
<asp:Label runat="server" ID="lblTotalPageNo"></asp:Label>
<asp:Button runat="server" ID="btnPrevious" Text="Previous"></asp:Button>
<asp:Button runat="server" ID="btnNext" Text="Next"></asp:Button>
</div>
<div>
<span>Go To Page :</span>
<asp:TextBox runat="server" ID="txtPageNo"></asp:TextBox>
<asp:Button runat="server" ID="btnGoToPageNo" Text="Go" />
</div>
</div>
<div id="submitArea">
<asp:Button runat="server" ID="btnSubmit" Text="Submit"/>
</div>
</div>
</form>
cs:
using System;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;
using WebCode.TestEntitys;
using System.Linq;
namespace WebCode.asp.net.Repeater
{
public partial class RepeaterTest : Page
{
#region properties
protected int PageSize
{
get { return int.Parse(ddlPageSize.SelectedValue); }
}
protected int CurrentPageNo
{
get { return !string.IsNullOrEmpty(lblCurrentPageNo.Text) ? int.Parse(lblCurrentPageNo.Text) : -1; }
set { lblCurrentPageNo.Text = value.ToString(); }
}
protected int TotalPageNo
{
get { return !string.IsNullOrEmpty(lblTotalPageNo.Text) ? int.Parse(lblTotalPageNo.Text) : -1; }
set { lblTotalPageNo.Text = value.ToString(); }
}
protected int GoToPage { get { return int.Parse(txtPageNo.Text); } }
#endregion
#region Init
protected void RegPageEvent()
{
btnNext.Click += btnNext_Click;
btnPrevious.Click += btnPrevious_Click;
btnGoToPageNo.Click += btnGoToPageNo_Click;
btnSubmit.Click += btnSubmit_Click;
}
protected void Page_Load(object sender, EventArgs e)
{
RegPageEvent();
if (IsPostBack) return;
CurrentPageNo = 0;
btnNext_Click(sender, e);
}
#endregion
#region Repeater paging
private void btnPrevious_Click(object sender, EventArgs e)
{
var ds = GetLastestDataSource();
if (CurrentPageNo == 1) return;
CurrentPageNo--;
BindRepeater(ds);
}
private void btnNext_Click(object sender, EventArgs e)
{
var ds = GetLastestDataSource();
if (CurrentPageNo == TotalPageNo) return;
CurrentPageNo++;
BindRepeater(ds);
}
private void BindRepeater(IEnumerable<Student> ds)
{
rptTest.DataSource = ds.Skip(PageSize * (CurrentPageNo - 1)).Take(PageSize);
rptTest.DataBind();
}
private IEnumerable<Student> GetLastestDataSource()
{
var ds = TestDs();
var page = ds.Count / PageSize;
if (page * PageSize != ds.Count)
TotalPageNo = 1 + page;
else
TotalPageNo = page;
return ds;
}
private void btnGoToPageNo_Click(object sender, EventArgs e)
{
var ds = GetLastestDataSource();
if (GoToPage > TotalPageNo || GoToPage < 1) return;
CurrentPageNo = GoToPage;
BindRepeater(ds);
}
#endregion
#region Data Source
List<Student> TestDs()
{
var sl = new List<Student>();
for (var i = 1; i < 36; i++)
{
sl.Add(new Student()
{
Name = "Stu_" + i.ToString(),
Id = i
});
}
return sl;
}
#endregion
#region Submit
void btnSubmit_Click(object sender, EventArgs e)
{
var rlt = "";
foreach (RepeaterItem item in rptTest.Items)
{
var chk = (item.FindControl("chkRptItem") as CheckBox);
if (chk != null && chk.Checked)
{
var id = item.FindControl("lblRptItem_Id") as Label;
var name = item.FindControl("lblRptItem_Name") as Label;
rlt += string.Format("Id: {0} , Name: {1} ", id.Text, name.Text);
}
}
Page.ClientScript.RegisterStartupScript(GetType(), "", "alert('" + rlt + "');", true);
}
#endregion
}
}