Динамически вложенные репитеры ASP.net - PullRequest
1 голос
/ 29 августа 2010

У меня есть часть кода, в которую я вкладываю репитеры, жестко кодируя их в HTML:

    <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 и материал для разметки. Есть ли способ программно вложить их в число ретрансляторов в зависимости от их расположения? Вот вид псевдо-кода того, что я хочу сделать:

     <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 одного повторителя другому в коде?

1 Ответ

0 голосов
/ 29 августа 2010

Вы можете создать свой шаблон в файле ascx, а затем загрузить его следующим образом:

rpt_1.LoadTemplate(template_file.ascx);

Сделайте это перед вызовом DataBind ();

...