+++ 前台代码
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound" >
<HeaderTemplate>
<table width="500">
<tr>
<td>员工号</td>
<td>员工姓名</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><a href='repeater05test.aspx?id=<%# Eval("EMPNO")%>'><%# Eval("ENAME") %></a><%# Eval("HIREDATE") %></td>
</tr>
</ItemTemplate>
<SeparatorTemplate>
<tr>
<td colspan="2"><hr style="border-top:1pt;"/></td>
</tr>
</SeparatorTemplate>
<FooterTemplate>
<tr>
<td colspan="2" style="font-size:12pt">共<asp:Label ID="lblpc" runat="server" Text="Label"></asp:Label>页 当前为第
<asp:Label ID="lblp" runat="server" Text="Label"></asp:Label>页<asp:HyperLink ID="hlfir" runat="server" Text="首页"></asp:HyperLink>
<asp:HyperLink ID="hlp" runat="server" Text="上一页"></asp:HyperLink><asp:HyperLink ID="hln" runat="server" Text="下一页"></asp:HyperLink>
<asp:HyperLink ID="hlla" runat="server" Text="尾页"></asp:HyperLink>
跳至第<asp:DropDownList ID="ddlp" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlp_SelectedIndexChanged" >
</asp:DropDownList>页
</td>
</tr>
</table>
</FooterTemplate>
</asp:Repeater>
+++ 后台代码
private PagedDataSource pds()
{
OracleConnection conn = new OracleConnection("Data Source=ora9; User ID=scott; Password=tiger; Unicode=True");
DataSet ds = new DataSet();
OracleDataAdapter daEMP = new OracleDataAdapter("SELECT * FROM EMP",conn);
daEMP.Fill(ds, "EMP");
PagedDataSource pds = new PagedDataSource();
pds.DataSource = ds.Tables["EMP"].DefaultView;
pds.AllowPaging = true;
pds.PageSize = 4;
pds.CurrentPageIndex = Convert.ToInt32(Request.QueryString["page"]);
return pds;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Repeater1.DataSource = pds();
Repeater1.DataBind();
}
}
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Footer)
{
DropDownList ddlp = (DropDownList)e.Item.FindControl("ddlp");
HyperLink lpfirst = (HyperLink)e.Item.FindControl("hlfir");
HyperLink lpprev = (HyperLink)e.Item.FindControl("hlp");
HyperLink lpnext = (HyperLink)e.Item.FindControl("hln");
HyperLink lplast = (HyperLink)e.Item.FindControl("hlla");
pds().CurrentPageIndex = ddlp.SelectedIndex;
int n = Convert.ToInt32(pds().PageCount);
int i = Convert.ToInt32(pds().CurrentPageIndex);
Label lblpc = (Label)e.Item.FindControl("lblpc");
lblpc.Text = n.ToString();
Label lblp = (Label)e.Item.FindControl("lblp");
lblp.Text = Convert.ToString(pds().CurrentPageIndex + 1);
if (!IsPostBack)
{
for (int j = 0; j < n; j++)
{
ddlp.Items.Add(Convert.ToString(j + 1));
}
}
if (i <= 0)
{
lpfirst.Enabled = false;
lpprev.Enabled = false;
lplast.Enabled = true;
lpnext.Enabled = true;
}
else
{
lpprev.NavigateUrl = "?page=" + (i - 1);
}
if (i >= n - 1)
{
lpfirst.Enabled = true;
lplast.Enabled = false;
lpnext.Enabled = false;
lpprev.Enabled = true;
}
else
{
lpnext.NavigateUrl = "?page=" + (i + 1);
}
lpfirst.NavigateUrl = "?page=0";
lplast.NavigateUrl = "?page=" + (n - 1);
ddlp.SelectedIndex = Convert.ToInt32(pds().CurrentPageIndex);
}
}
protected void ddlp_SelectedIndexChanged(object sender, EventArgs e)
{
string pg = Convert.ToString((Convert.ToInt32(((DropDownList)sender).SelectedValue) - 1));
Response.Redirect("repeater05.aspx?page=" + pg);
}
+++ 说明
(1) 将分页按钮放在了Repeater 的 FooterTemplate,所以要实现分页功能,就需要 Repeater 的 ItemDataBound 事件,该事件在数据绑定后,并在数据显示前出发;
(2) 必须用视图DataTable.DefaultView给 PagedDataSource.DataSource 赋值;
(3) 传递页码的方式是采用通过超链接向当前页面传参数。