Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Accessing Textboxes in Repeater Control

Tags:

All the ways I can think to do this seem very hackish. What is the right way to do this, or at least most common?

I am retrieving a set of images from a LINQ-to-SQL query and databinding it and some other data to a repeater. I need to add a textbox to each item in the repeater that will let the user change the title of each image, very similar to Flickr.

How do I access the textboxes in the repeater control and know which image that textbox belongs to?

Here is what the repeater control would look like, with a submit button which would update all the image rows in Linq-to-SQL:

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

Edit:

This code works

Just make sure you don't blow your values away by Binding outside of if(!Page.IsPostBack) like me.. Oops.

<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> 

And Submit Click:

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         }     } } 
like image 793
Jason Avatar asked Mar 20 '10 21:03

Jason


People also ask

What is repeater controller?

The Repeater control is used to display a repeated list of items that are bound to the control. The Repeater control may be bound to a database table, an XML file, or another list of items. Repeater is a Data Bind Control. Data Bind Controls are container controls.


2 Answers

Have you tried something like following on the button click:-

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       } } 

/* Where txtName and Img are the Ids of the textbox and the image controls respectively in the repeater.*/

Hope this helps.

like image 98
Ashish Gupta Avatar answered Nov 11 '22 08:11

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); }                   } 

Be sure to add EnableViewState="False" to your repeater, otherwise you will get empty string. (That wasted my time, dont waste yours :) )

like image 35
Etienne Dupuis Avatar answered Nov 11 '22 08:11

Etienne Dupuis