net 2.0中的Repeater嵌套 的两种方法

本文介绍 ASP.NET 中 Repeater 控件的两种嵌套使用方式:一种是在 ItemDataBound 事件中动态绑定子 Repeater;另一种是通过设置 DataSource 属性直接绑定子数据源。这两种方式都能实现按需加载不同分类下的产品信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

后台代码部分(部分代码): 
//在绑定分类品名时,绑定分类下的产品  
private void rptCategories_ItemDataBound(object
 sender, System.Web.UI.WebControls.RepeaterItemEventArgs e) 

    BLL.Products products 
=new
 BLL.Products(); 
    
if (e.Item.ItemType == ListItemType.Item ||    e.Item.ItemType ==
 ListItemType.AlternatingItem)  
    

        Repeater rptProduct 
= (Repeater) e.Item.FindControl("rptProduct"
); 
        
//找到分类Repeater关联的数据项
 
        DataRowView rowv =
 (DataRowView)e.Item.DataItem; 
        
//提取分类ID
 
        int CategorieId = Convert.ToInt32(rowv["ID"
]); 
        
//根据分类ID查询该分类下的产品,并绑定产品Repeater
 
        rptProduct.DataSource =
 products.GetProductsByCategorieId(CategorieId); 
        rptProduct.DataBind(); 
    }
 
}
 
 

另一种方法:

前台:

<!-- start parent repeater -->
<asp:repeater id="parentRepeater" runat="server">
   <itemtemplate>
      <b><%# DataBinder.Eval(Container.DataItem,"au_id") %></b><br>

      <!-- start child repeater -->
      <asp:repeater id="childRepeater" datasource='<%# ((DataRowView)Container.DataItem)
      .Row.GetChildRows("myrelation") %>' runat="server">

         <itemtemplate>
            <%# DataBinder.Eval(Container.DataItem, "[/"title_id/"]")%><br>
         </itemtemplate>
      </asp:repeater>
      <!-- end child repeater -->

   </itemtemplate>
</asp:repeater>
<!-- end parent repeater -->

 

后台:public partial class NestedRepeater : System.Web.UI.Page
{
    protected System.Web.UI.WebControls.Repeater childRepeater;//parentRepeater;
    public NestedRepeater()
    {
        Page.Init += new System.EventHandler(Page_Init);
    }
    public void Page_Load(object sender, EventArgs e)
    {
        //Create the connection and DataAdapter for the Authors table.
        SqlConnection cnn = new SqlConnection("server=.;database=pubs; user id=sa;pwd=;");
        SqlDataAdapter cmd1 = new SqlDataAdapter("select * from authors", cnn);

        //Create and fill the DataSet.
        DataSet ds = new DataSet();
        cmd1.Fill(ds, "authors");

        //Create a second DataAdapter for the Titles table.
        SqlDataAdapter cmd2 = new SqlDataAdapter("select * from titleauthor", cnn);
        cmd2.Fill(ds, "titles");

        //Create the relation bewtween the Authors and Titles tables.
        ds.Relations.Add("myrelation",
        ds.Tables["authors"].Columns["au_id"],
        ds.Tables["titles"].Columns["au_id"]);

        //Bind the Authors table to the parent Repeater control, and call DataBind.
        parentRepeater.DataSource = ds.Tables["authors"];
        Page.DataBind();

        //Close the connection.
        cnn.Close();
    }
    private void Page_Init(object sender, EventArgs e)
    {
        InitializeComponent();
    }
    private void InitializeComponent()
    {
        this.Load += new System.EventHandler(this.Page_Load);
    }

}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值