Repeater嵌套绑定Repeater

Repeater嵌套Repeater的结构

cs代码: 

ExpandedBlockStart.gifCo
private void RpTypeBind()
        {
//GetQuestionTypeAndCount() 返回一个datatable
            this.rptypelist.DataSource = LiftQuestionCtr.GetQuestionTypeAndCount();                   
            
this.rptypelist.DataBind();
        }

 protected void rptypelist_ItemDataBound(object sender, RepeaterItemEventArgs e)
        { 

        //判断里层repeater处于外层repeater的哪个位置( AlternatingItemTemplate,FooterTemplate,    //HeaderTemplate,,ItemTemplate,SeparatorTemplate)
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                Repeater rep 
= e.Item.FindControl("rpquestionlist"as Repeater;//找到里层的repeater对象
                DataRowView rowv = (DataRowView)e.Item.DataItem;//找到分类Repeater关联的数据项 
                int typeid = Convert.ToInt32(rowv["qtid"]); //获取填充子类的id 
                rep.DataSource = LiftQuestionCtr.GetSomeQuestionsByTypeid(typeid, 2);
                rep.DataBind();

             }

       }

aspx:

ContractedBlock.gifExpandedBlockStart.gifCode
<table border="0" cellpadding="0" cellspacing="0" style="margin-bottom: 5px" width="100%">
    
<asp:Repeater runat="server" ID="rptypelist" OnItemDataBound="rptypelist_ItemDataBound">
        
<ItemTemplate>
            
<tr>
                
<td class="fb">
                    
&nbsp;&nbsp;<a href="Lists.aspx?Qtid=<%#Eval("qtid") %>"><%#Eval("qtypename"%></a> <span id="askCount_15"
                        
class="date2">[<%#Eval("typecount")%>]</span>
                
</td>
            
</tr>
            
<tr>
                
<td>
                    
<div id="askTop2_15" class="ask_list">
                        
<asp:Repeater runat="server" ID="rpquestionlist">
                            
<ItemTemplate>
                                
<a href="Question.aspx?qid=<%#Eval("liftquestionid")%>">
                                    
<%#Eval("questiontitle")%></a><br />
                            
</ItemTemplate>
                        
</asp:Repeater>
                    
</div>
                
</td>
            
</tr>
        
</ItemTemplate>
    
</asp:Repeater>
</table>


 

在一般的网站中浏览类别的用户控件通常都位于大多数 ASP.NET 页的左边,它使用户能够按类别快速的查找产品。最近遇到一个客户,因为在他网站上展示的产品并不多,所以要求在原有类别浏览的基础上将产品也加进去。一来更方便,二来加长了左部导航栏的长度使页面更协调。原有的分类导航栏是由Repeater实现的,现在需要在每一个分类下加入该类的商品信息,于是我想到了在原有Repeater中嵌套Repeater。实现界面如下:
2008042816173428.gif

前台页面部分:
2008042816173432.gif<asp:Repeater id="rptCategories" runat="server">
2008042816173432.gif  
<HeaderTemplate>
2008042816173432.gif    
<table width="100%" border="0" cellspacing="0" cellpadding="0">
2008042816173432.gif  
</HeaderTemplate>
2008042816173432.gif  
<ItemTemplate>
2008042816173432.gif    
<!--分类名称-->
2008042816173481.gif2008042816173493.gif    
<tr><th><%2008042816173498.gif# DataBinder.Eval(Container.DataItem, "TypeName"%></th></tr>
2008042816173432.gif    
<!--分类下的产品-->
2008042816173432.gif    
<asp:Repeater id="rptProduct" runat="server">
2008042816173432.gif      
<ItemTemplate>
2008042816173481.gif2008042816173493.gif        
<tr><td><href='ProductInfo.aspx?Id=<%# DataBinder.Eval(Container.DataItem, "ID") %>'> 

<%2008042816173498.gif# DataBinder.Eval(Container.DataItem, "ProductName"%></a></td></tr>
2008042816173432.gif      
</ItemTemplate>
2008042816173432.gif    
</asp:Repeater>
2008042816173432.gif  
</ItemTemplate>
2008042816173432.gif  
<FooterTemplate>
2008042816173432.gif    
</table>
2008042816173432.gif  
</FooterTemplate>
2008042816173432.gif
</asp:Repeater>
2008042816173432.gif

后台代码部分(部分代码):
2008042816173432.gif//在绑定分类品名时,绑定分类下的产品
2008042816173432.gif
private void rptCategories_ItemDataBound(object sender, 

System.Web.UI.WebControls.RepeaterItemEventArgs e)
2008042816173481.gif2008042816173493.gif
2008042816173498.gif{
2008042816173488.gif    BLL.Products products 
=new BLL.Products();
2008042816173488.gif    
if (e.Item.ItemType == ListItemType.Item ||    e.Item.ItemType == ListItemType.AlternatingItem) 
2008042816173482.gif2008042816173596.gif    
2008042816173498.gif{
2008042816173488.gif        Repeater rptProduct 
= (Repeater) e.Item.FindControl("rptProduct");
2008042816173488.gif        
//找到分类Repeater关联的数据项
2008042816173488.gif
        DataRowView rowv = (DataRowView)e.Item.DataItem;
2008042816173488.gif        
//提取分类ID
2008042816173488.gif
        int CategorieId = Convert.ToInt32(rowv["ID"]);
2008042816173488.gif        
//根据分类ID查询该分类下的产品,并绑定产品Repeater
2008042816173488.gif
        rptProduct.DataSource = products.GetProductsByCategorieId(CategorieId);
2008042816173488.gif        rptProduct.DataBind();
2008042816173535.gif    }

2008042816173588.gif}

摘自 http://www.webshu.net/jiaocheng/programme/ASPNET/200804/12053.html

转载于:https://www.cnblogs.com/lushuicongsheng/archive/2010/12/16/1908168.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值