Pergunta

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.

Foi útil?

Solução

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

Outras dicas

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);
        }
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top