Repeater innestati

Per gestire due repeater innestati:

<asp:Repeater runat="server" ID="groupItemRepeater" OnItemDataBound="groupItemRepeater_ItemDataBound">
<ItemTemplate>
  <!-- bla bla -->
  <asp:Repeater runat="server" ID="singleItemRepeater">
      <ItemTemplate>
         <!-- bla bla -->
      </ItemTemplate>
  </asp:Repeater>
</ItemTemplate>
</asp:Repeater>

E nel code behind:

protected void Page_Load(object sender, EventArgs e)
{
  groupItemRepeater.DataSource = //loading;
  groupItemRepeater.DataBind();
}
protected void groupItemRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
          RepeaterItem item = e.Item;
         if ((item.ItemType == ListItemType.Item) || (item.ItemType == ListItemType.AlternatingItem))
         {
         Repeater myRepeater = (Repeater)item.FindControl("singleItemRepeater");
         if (myRepeater != null)
         {
           IList<MyClass> documenti = //loading ;
           if (documenti.Count > 0)
           {
             myRepeater.DataSource = documenti;
             myRepeater.DataBind();
           }
           else
           {
            item.Visible = false;
           }
         }
  }
}

Se avessimo bisogno di un attributo dell'elemento padre nel repeater più interno, potremmo far riferimento al padre tramite .parent.parent.


Technorati tags:

Proviamoci tutti: ottimizzazione e minimizzazione di codice

Proviamo a ottimizzare e minimizzare questo codice scritto senza pensare troppo (presente in uno user control - noterete i this): in un sito voglio mostrare quattro immagini random diverse prese da una galleria rappresentata da una collection di images. Ammesse funzioni del tipo Array.xxx. Obiettivo primario eliminare i--

 

        IList<MyClass> images = // loading;
        if (images != null && images.Count > 0)
        {
            // ottimizzazione
            if (images.Count <= 4)
            {
                for (int i = 0; i < 4 && i < images.Count; i++)
                {
                    img[i] = i;
                }
            }
            else
            {
                for (int i = 0; i < 4 && i < images.Count; i++)
                {
                    Random random = new Random();
                    int generato = random.Next(0, images.Count - 1);
                    bool trovato = false;
                    foreach (int elemento in img)
                    {
                        if (generato == elemento)
                        {
                            // esiste già
                            trovato = true;
                            break;
                        }
                    }
 
                    if (!trovato)
                        img[i] = generato;
                    else
                        i--;
                }
            }
            for (int i = 0; i < 4 && i < images.Count; i++)
            {
                Image image = (Image)this.FindControl("img" + i);
                if (image != null)
                {
                    image.ImageUrl = images[img[i]]["percorso"];
                }
            }
            if (images.Count < 4)
            {
                for (int i = images.Count; i < 4; i++)
                {
                    Image image = (Image)this.FindControl("img" + i);
                    if (image != null)
                        image.Visible = false;
                }
            }
        }
        else
        {
            img0.Visible = false;
            img1.Visible = false;
            img2.Visible = false;
            img3.Visible = false;
        }
Technorati tags: