fermat, quello che vuoi ottenere si puo' fare dal metodo ItemDataBound del Repeater.
comunque, riguardo la sintassi su cui c'e' confusione, di seguito un esempio che funziona ("NOME_PRODOTTO" è una colonna di una tabella che viene letta e messa come datasource al Repeater nel Code-Behind).
La funzione Choose fa una semplice cernita fra i valori che contengono la parola "lavatrice".
Al placeholder che vedi, nell'evento ItemDataBound, viene aggiunto un controllo (IDPlaceholder.Controls.Add) a seconda di una logica custom, che puo' essere una qualsiasi.
La pagina ASPX:
codice:<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="repeaterExample.aspx.cs" Inherits="repeaterExample" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <script runat="server"> public string Choose(string x) { if (x.Contains("lavatrice")) return x; else return "non contiene la parola cercata"; } </script> </head> <body> <form id="form1" runat="server"> <div> <asp:Repeater ID="rpt" runat="server" OnItemDataBound="rpt_ItemDataBound"> <ItemTemplate> <asp:Label ID="lb" Text='<%# Choose(DataBinder.Eval(Container.DataItem, "NOME_PRODOTTO").ToString()) %>' runat="server"></asp:Label> <asp:PlaceHolder ID="ph" runat="server"></asp:PlaceHolder> </ItemTemplate> <SeparatorTemplate><hr /><br /></SeparatorTemplate> </asp:Repeater> </div> </form> </body> </html>
L'evento citato, nel Code-Behind:
codice:protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { Label lb = new Label(); lb = (Label)e.Item.FindControl("lb"); if (lb.Text.Contains("lavatrice")) { // // Aggiunta di un controllo di esempio al placeholder // System.Web.UI.HtmlControls.HtmlButton b = new System.Web.UI.HtmlControls.HtmlButton(); b.ID = "bt"; b.InnerText = "Bottone aggiunto da codice"; PlaceHolder ph = new PlaceHolder(); ph = (PlaceHolder)e.Item.FindControl("ph"); ph.Controls.Add(b); } } }
La cosa da tenere a mente, col secondo metodo, è ricreare i controlli creati a runtime, che non è cosa da poco quando sono tanti (e neanche quando non lo sono, a dire il vero). Prova, e ricorda di riprodurre gli stessi ID della prima creazione (qui vado a memoria).
Effettivamente, su questo asp.net è un po' rognoso. Comunque la sintassi per togliere quell'errore è nel primo blocco di codice

Rispondi quotando