Server controls in an asp.net repeater

戏子无情 提交于 2019-12-01 09:55:17

If you don't want to use an ItemCommand and want to just loop through the Repeater's items collection, so you have one "save" button at the bottom of the page, you can do it like this:

foreach(RepeaterItem itm in MyRepeater.Items)
{
     TextBox t = (TextBox)(itm.FindControl("TextBox1"));
     // do something with it.

}

Of course, you'll need to make sure that the TextBox1 in the ASPX has the Runat="Server" attribute.

You can use the Repeater.ItemDataBound Event to locate controls nested in a Repeater.

<asp:Repeater ID="Repeater1" Runat="server" OnItemDataBound="Repeater1_ItemDataBound">
   <ItemTemplate>
      <div><asp:TextBox ID="TextBox1" runat="server" /></div>
   </ItemTemplate>
</asp:Repeater>

Then in code behind:

protected void Repeater1_ItemDataBound(object source, RepeaterCommandEventArgs e)
{
   if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType !=
      ListItemType.AlternatingItem)
      return;

   TextBox textBox1 = e.Item.FindControl("TextBox1") as TextBox;
   if (textBox1 != null)
   {
   // do something with it
   }
}

Seems like my problem was in the way I was thinking :)

My solution: I just added controls as I normally would do, but inside the ItemTemplate. On callback events of the controls, I'd go for:

(Button example)

protected void btnUpdate_OnClick(object sender, EventArgs e)
    {
        Button b = sender as Button;
        if (b != null)
        {
            RepeaterItem ri = b.Parent as RepeaterItem;
            if (ri != null)
            {
                string name = null;

                //Fetch data
                TextBox txtName = ri.FindControl("txtName") as TextBox;

.. etc..

So, after finding the RepeaterItem i just treat it as I would with any ControlGroup. Doesn't matter that I actually got 5 different textbosses, coded with ID="txtName", since asp.net automagically gives the controls "obfuscated" names in the client markup, and translates this back to my ID's on postback.

Hope this helps someone, and sorry for bothering :)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!