2010-08-29 59 views
1

我的代码的一部分,我窝中继器在HTML硬编码他们:动态嵌套中继器ASP.net

<asp:Repeater ID="rpt_1" runat="server"> 
     <ItemTemplate> 
      <div><%# Eval("ID") %></div> 
      <asp:Repeater ID="rpt_2" runat="server"> 
       <ItemTemplate> 
         <div><%# Eval("ID") %></div> 
         <asp:Repeater ID="rpt_3" runat="server"> 
          <ItemTemplate> 
           <div><%# Eval("ID") %></div> 
          </ItemTemplate> 
         </asp:Repeater> 
       </ItemTemplate> 
      </asp:Repeater> 
     </ItemTemplate> 
    </asp:Repeater> 

每个转发器的ItemTemplate具有完全相同的HTML和布局的东西。有没有一种方法可以根据一种布局将它们编入n个中继器中?这里有点什么,我想要做的pseduo代码:

 <asp:Repeater ID="rpt_1" runat="server"> 
     <ItemTemplate> 
      <div><%# Eval("ID") %></div> 
      <asp:Repeater ID="rpt_2" runat="server"/>     
     </ItemTemplate> 
    </asp:Repeater> 

    rpt_1.ItemDataBound += new RepeaterItemEventHandler(rpt_ItemDataBound); 
    rpt_1.DataSource = q; 
    rpt_1.DataBind(); 

protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (sender is Repeater) 
    { 
     string strID = ((Repeater)sender).ID.ToString(); 
     strID = strID.Substring(strID.Length - 1, 1).ToString(); 
     Repeater rpt = (Repeater)e.Item.FindControl("rpt_" + strID); 

     if (strID != "4") 
     {//Stop the nested creation 

     //Does this work? 
     //How do I accomplish this? 
     rpt.ItemTemplate = (Repeater)e.Item.FindControl("rpt_" + (Convert.ToInt32(strID)-1).ToString()).ItemTemplate; 

     rpt_1.ItemDataBound += new RepeaterItemEventHandler(rpt_ItemDataBound); 
     rpt.DataSource = q; 
     rpt.DataBind(); 
     } 
    } 
} 

我可以将一个中继器的ItemTemplate中到另一个代码?

回答

0

您可以创建在ASCX文件模板,然后加载它像这样:

rpt_1.LoadTemplate(template_file.ascx); 

做到这一点,你打电话之前的DataBind();