Accesso ai controlli di un Repeater

Per ben tre vole la settimana scorsa mi è stata chiesta la stessa cosa: <<Come faccio ad accedere ai controlli che un repeater ha generato?>>. Le ragioni per cui vogliamo farlo possono essere diverse, ma tipicamente si tratta di leggere quello che un utente ha inserito.

Piccola spiegazione di quello che stiamo per vedere: Il controllo repeater genera dopo il databind una collection di controlli
RepeaterItem. Questa collection si trova nella proprietà items del repeater e ognuno di questi elementi rappresenta la “riga” del repeater. Per accedere ai controlli basta usare il metodo FindControl sul RepeaterItem.

Vediamo di capire come farlo con un esempio: Stampiamo a video una lista di persone, l'utente ne dovrà scegliere alcune e premere un pulsante. Il postback scriverà in un campo literal i nomi delle persone scelte. Ovviamente è un esempio banale, ma più che sufficiente allo scopo.

Cominciamo con il file aspx. Riporto solo il codice del repeater per praticità.
Il Repeater genera una tabella che per ogni riga contiene:due litteral con le informazioni sulla persona e il controllo checkbox che dovremo verificare.

<asp:Repeater ID="repList" runat="server">

<HeaderTemplate>

<asp:Label ID="lblTitle" runat="server" Text="Titolo"></asp:Label>

            <table>
</HeaderTemplate>
<ItemTemplate>
<tr><td>

<asp:Label ID="lblName" runat="server" Text='<%# Eval("Name")%>'></asp:Label>

</td><td>

<asp:Label ID="lblAge" runat="server" Text='<%# Eval("Age")%>'></asp:Label>

</td><td>

<asp:CheckBox ID="chkIsSelected" runat="server" Checked=<%# Eval("Selected")%>/>

</td>tr>
</ItemTemplate>
      <FooterTemplate>
            </table>
</FooterTemplate>
</asp:Repeater>


Adesso andiamo a vedere il codebehind.
La nostra sorgente dati una lista di clsPerson (si una lista può essere usata come datasource!).

    public class clsPerson

    {
        public string Name { get; set; }
        public int Age { get; set; }

        public bool Selected { get; set; }

 
    }
 
    public List<clsPerson> CreateList()
    {

        List<clsPerson> Group = new List<clsPerson>();

        clsPerson newP = new clsPerson();

        newP.Name = "Mario Rossi";
        newP.Age = 24;

        newP.Selected = false;

        Group.Add(newP);

 
        newP = new clsPerson();

        newP.Name = "Giulio Verdi";

        newP.Age = 20;
        newP.Selected = true;

        Group.Add(newP);

 
        newP = new clsPerson();
        newP.Name = "Mario Gialli";
        newP.Age = 32;

        newP.Selected = false;

        Group.Add(newP);

 
        newP = new clsPerson();

        newP.Name = "Antonio Bianchi";

        newP.Age = 18;
        newP.Selected = true;

        Group.Add(newP);

 
        return Group;
    }


Adesso il classico databind nel PageLoad

    protected override void OnLoad(EventArgs e)

    {
        base.OnLoad(e);
 
        if (!IsPostBack)
        {

            repList.DataSource = CreateList();

            repList.DataBind();

        }
    }
 

E per ultimo quello che veramente è interessante: La risposta del button con la lettura dei controlli.

    void btnAnalyze_Click(object sender, EventArgs e)

    {

        StringBuilder Result = new StringBuilder();

 

        foreach (RepeaterItem item in repList.Items)

        {

            if ((item.FindControl("chkIsSelected") as CheckBox).Checked)

            {

                Result.Append((item.FindControl("lblName") as Label).Text);

                Result.AppendLine("<br />");
            }
        }
 

        lblResult.Text = "Hai scelto:<br/>" + Result.ToString();

    }
 

Bene questo è tutto. Forse quest’articolo avrà un seguito perché la prossima domanda  è: <<ok, ma come accedo ai controlli generati da un repeater da javascript?>>.

Come sempre vi invito a elargire: consigli su come migliorare quest’articolo, richieste di chiarimenti per quello che non ho saputo spiegare, mazzi di fiori e cioccolatini.

Qui trovate la seconda parte dell'articolo (come accedere ai controlli lato javascript)

posted @ giovedì 17 gennaio 2008 02:12

Print
«aprile»
domlunmarmergiovensab
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011