Question

I have a nested repeater and I use a textbox in footer template. I wanto to get textbox.text value in button click. Here is my repeater:

    <asp:Repeater ID="rprSSFirst" runat="server" OnItemDataBound="rprSSFirst_ItemDataBound"  >

<HeaderTemplate>
    </HeaderTemplate>
            <ItemTemplate>
                //******Some Items******
               <asp:Repeater ID="rprSSNested" runat="server" >  //Nested Repeater
                    <HeaderTemplate>
                    </HeaderTemplate>
                      <ItemTemplate>
                           //******Some Items******
                      </ItemTemplate>
                    <FooterTemplate>   
                      <div style=" padding: 20px 35px;" id='ajax'>
                         <asp:TextBox ID="textbox" TextMode="MultiLine" Columns="50" Rows="10" runat="server"></asp:TextBox>
                         <br />
                         <asp:Button ID="Button2" runat="server" OnClick="btn_Save_Click" Text="Save" />                             
                      </div>  
                  </FooterTemplate>
                </asp:Repeater>
              </ItemTemplate>
            <FooterTemplate>

            </FooterTemplate>
        </asp:Repeater>

//In Code Behind

protected void btn_Save_Click(object sender, EventArgs e)
{
 TextBox txtAns = (TextBox)rprSSFirst.Controls[rprSSFirst.Controls.Count - 1].FindControl("textbox");
}

But txtAns Value is always null. How to get footer item textbox value in button click? or any other way?

Thanks for your answers.

Était-ce utile?

La solution

You have to find the nested RepeaterItem first where both controls are sitting. You can get it by casting the NamingContainer:

protected void btn_Save_Click(object sender, EventArgs e)
{
    Button btnSave = (Button) sender;
    RepeaterItem item = (RepeaterItem) btnSave.NamingContainer;
    TextBox txtAns = (TextBox) item.FindControl("textbox");
}

Autres conseils

You can use Commandname property like this for button of nested repeater:

 <asp:Repeater ID="rprSSNested" runat="server" OnItemCommand="rprSSNested_ItemCommand" >  
                <HeaderTemplate>
                </HeaderTemplate>
                  <ItemTemplate>  
                       //******Some Items******
                  </ItemTemplate>
                <FooterTemplate>   
                  <div style=" padding: 20px 35px;" id='ajax'>
                     <asp:TextBox ID="textbox" TextMode="MultiLine" Columns="50" Rows="10" runat="server" ></asp:TextBox>
                     <br />
                     <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Save" CommandName="cmd" CommandArgument="arg"/>                             
                  </div>  
              </FooterTemplate>
            </asp:Repeater> 

And add event in c# code like this:

protected void rprSSNested_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Footer)
    {
        if (e.CommandName == "cmd")
        {
            string ss = ((TextBox)e.Item.FindControl("textbox")).Text;
            Response.Write(ss);
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top