web-dev-qa-db-fra.com

Accéder aux zones de texte dans le contrôle de répéteur

Tous les moyens que je peux imaginer pour y parvenir me semblent très difficiles. Quelle est la bonne façon de faire cela, ou du moins la plus courante?

Je récupère un ensemble d'images à partir d'une requête LINQ-to-SQL et lui associe des données, ainsi que d'autres données, à un répéteur. Je dois ajouter à chaque élément du répéteur une zone de texte qui permettra à l'utilisateur de modifier le titre de chaque image, très similaire à Flickr.

Comment puis-je accéder aux zones de texte du contrôle de répéteur et savoir à quelle image appartient cette zone de texte?

Voici à quoi ressemblerait le contrôle répéteur, avec un bouton d'envoi qui mettrait à jour toutes les lignes d'image dans Linq-to-SQL:

alt text http://casonclagg.com/layout.jpg

Modifier:

Ce code fonctionne

Assurez-vous simplement de ne pas détruire vos valeurs en vous liant à l'extérieur de if (! Page.IsPostBack) comme moi ... Oups.

<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
        <div class="itemBox">
            <div class="imgclass">
                <a title='<%# Eval("Name") %>' href='<%# Eval("Path") %>' rel="gallery">
                    <img alt='<%# Eval("Name") %>' src='<%# Eval("Path") %>' width="260" />
                </a>
            </div>
            <asp:TextBox ID="TextBox1" Width="230px" runat="server"></asp:TextBox>
        </div>
    </ItemTemplate>
</asp:Repeater>

Et soumettre le clic:

protected void Button1_Click(object sender, EventArgs e)
{
    foreach (RepeaterItem item in Repeater1.Items)
    {
        TextBox txtName = (TextBox)item.FindControl("TextBox1");
        if (txtName != null)
        {
            string val = txtName.Text;
            //do something with val
        }
    }
}
22
Jason

Avez-vous essayé quelque chose comme suivre sur le clic du bouton: -

foreach (RepeaterItem item in Repeater1.Items)
{
      TextBox txtName= (TextBox)item.FindControl("txtName");
      if(txtName!=null)
      {
      //do something with txtName.Text
      }
      Image img= (Image)item.FindControl("Img");
      if(img!=null)
      {
      //do something with img
      }
}

/ * Où txtName et Img sont les identifiants de la zone de texte et des contrôles d’image respectivement dans le répéteur. * /

J'espère que cela t'aides.

33
Ashish Gupta

.aspx

        <asp:Repeater ID="rpt" runat="server" EnableViewState="False">
        <ItemTemplate>
                <asp:TextBox ID="txtQty" runat="server" /> 
        </ItemTemplate>
        </asp:Repeater>

.cs

        foreach (RepeaterItem rptItem in rpt.Items)
        {
            TextBox txtQty = (TextBox)rptItem.FindControl("txtQty");
            if (txtQty != null) { Response.Write(txtQty.Text); }          
        }

Assurez-vous d'ajouter EnableViewState = "False" à votre répéteur, sinon vous obtiendrez une chaîne vide. (Cela a perdu mon temps, ne perdez pas le vôtre :))

11
Etienne Dupuis

En postback, vous pouvez parcourir la collection de RepeaterItems dans repeater.Items. Vous pouvez ensuite récupérer chaque zone de texte avec un code tel que 

TextBox tbDemo = (TextBox)rptr.Items[index].FindControl("textBox");
0
Anthony Pegram