asp.net中repeater控件的嵌套和实现分页

前台的代码
<asp:Repeater ID= "Repeater1 " runat= "server " OnItemDataBound= "Repeater1_ItemDataBound "> 
<HeaderTemplate> <%--这里是头模板--%> 
<table width= "500 "> 
<tr style= "background-color: #ccffcc; "> 
<td> 作者 </td> 
<td> 书籍 </td> 
</tr> 
</HeaderTemplate> 
<ItemTemplate> <%--项模板--%> 
<tr> 
<td> <a href= 'aaa.apsx?id= <%# Eval( "au_id ") %> '> <%# Eval( "au_lname ")%> </a> </td> 
<td> <asp:Repeater ID= "repeater2 " runat= "server " datasource= ' <%# Eval( "myrela ") %> '> 
<ItemTemplate> 
<%# Eval( "[\ "title_id\ "] ")%> <br> 
</ItemTemplate> 
</asp:Repeater> </td> 
</tr> 
</ItemTemplate> 
<SeparatorTemplate> <%--分隔符模板--%> 
<tr> <td colspan= "2 "> 
<hr size= "1pt "> 
</td> </tr> 
</SeparatorTemplate> 
<FooterTemplate> <%--页脚模板--%> 
<tr> 
<td colspan= "2 " style= "font-size: 12pt; color: #0099ff; background-color: #e6feda; "> 共 <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> 
</td> 
</tr> 
</table> 
</FooterTemplate> 
</asp:Repeater> 

在cs文件中的写法:

public partial class _Default : System.Web.UI.Page 
{ 
protected void Page_Load(object sender, EventArgs e) 
{//注释都在语句下面: 
if (!IsPostBack) 
{ 
Repeater1.DataSource = pds(); 
//为Repeater1控件指定数据源 
Repeater1.DataBind(); 
//这个当然是必须的,绑定上去 
} 
} 
private PagedDataSource pds() 
{ 
string connstring = ConfigurationManager.ConnectionStrings[ "Pubconn "].ConnectionString; 
//声明一个字符串,后面随时可以用 
SqlConnection con = new SqlConnection(connstring); 
//初始化连接 
SqlDataAdapter sda = new SqlDataAdapter( "select * from authors ", con); 
//初始化一个SqlDataAdapter,并给出查询语句 
DataSet ds = new DataSet(); 
//初始化一个DataSet 
sda.Fill(ds, "name "); 
//将上面查询到的数据填充到name表中 
SqlDataAdapter sda2 = new SqlDataAdapter( "select * from titleauthor ", con); 
//同上 
sda2.Fill(ds, "title "); 
//同上 
ds.Relations.Add( "myrela ", ds.Tables[ "name "].Columns[ "au_id "], ds.Tables[ "title "].Columns[ "au_id "]); 
//为上面建立的两个表创建一个关系,指明父列和子列的名称并为他们的关系命名,前面将会用到 

PagedDataSource pds = new PagedDataSource(); 
//初始化一个PagedDataSource,允许控件分页 
pds.DataSource = ds.Tables[ "name "].DefaultView; 
//将上面的ds转换成标准数据视图 
pds.AllowPaging = true; 
//允许分页 
pds.PageSize = 5; 
//每页大小为5 
pds.CurrentPageIndex = Convert.ToInt32(Request.QueryString[ "page "]); 
//设置当前页 
return pds; 
//将处理完毕的pds对象发出去 
} 
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
if (e.Item.ItemType == ListItemType.Footer) 
{//判断当前项是页脚模板 
int n = pds().PageCount;//将分页总数赋给变量n 
int i = pds().CurrentPageIndex;//将当前分页码赋给i 

Label lblpc = (Label)e.Item.FindControl( "lblpc "); 
lblpc.Text = n.ToString(); 
//找到lblpc这个Label,将总页码赋给他 
Label lblp = (Label)e.Item.FindControl( "lblp "); 
lblp.Text = Convert.ToString(pds().CurrentPageIndex + 1); 
//找到lblp这个Label,将当前页码赋给他,但是注意,因为页码从0开始,这里要直观的话就得加1 
HyperLink hlfir = (HyperLink)e.Item.FindControl( "hlfir "); 
hlfir.NavigateUrl = "?page=0 "; 
HyperLink hlla = (HyperLink)e.Item.FindControl( "hlla "); 
hlla.NavigateUrl = "?page= " + Convert.ToInt32(n - 1); 
//找到表示最前页和末页的Label,为他们的NavigateUrl属性赋为第0页和最大页码减1 
HyperLink hlp = (HyperLink)e.Item.FindControl( "hlp "); 
HyperLink hln = (HyperLink)e.Item.FindControl( "hln "); 
//找到表示上页和下页这两个控件 
if (i <= 0) 
{//如果当前页已经是第0页 
hlp.Enabled = false; 
hlfir.Enabled = false; 
hln.Enabled = true; 
} 
else 
{ 
hlp.NavigateUrl = "?page= " + Convert.ToInt32(i - 1); 
} 
if (i > n-2 ) 
{//如果当前项已经是最末页 
hln.Enabled = false; 
hlla.Enabled = false; 
hlp.Enabled = true; 
} 
else 
{ 
hln.NavigateUrl = "?page= " + Convert.ToInt32(i + 1); 
} 
} 
} 
} 



 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值