Registrar Trigger no UpdatePanel de um Controle contido em uma GridView
Postado em 27. jul, 2012 por Jonatas Cezarino em Tudo sobre Tecnologia
Primeiro vamos ver a maneira mais comum de usarmos uma Trigger do UpdatePanel. No exemplo abaixo, temos um LinkButton que esta contido no UpdatePanel “MeuUpdatePanel”. Sendo assim declaro a tag <Triggers>(fora do ContentTemplate) do UpdatePanel e dentro desta insiro o ou os Controles desejados. No exemplo abaixo temos um LinkButton:
<asp:ScriptManager ID="ScriptManagerUpdatePanel" runat="server"> </asp:ScriptManager> <asp:UpdatePanel ID="MeuUpdatePanel" runat="server" RenderMode="Inline"> <Triggers> <asp:PostBackTrigger ControlID="LinkButtonTeste" /> </Triggers> <ContentTemplate> <asp:LinkButton ID="LinkButtonTeste" runat="server" CausesValidation="false" OnCommand="LinkButtonTeste_Command" Visible="true" ToolTip="Clique aqui" Text="Clique aqui"></asp:LinkButton> <br /> <asp:Label ID="lblData" runat="server" Text="Vou carregar a data aqui"></asp:Label> </ContentTemplate> </asp:UpdatePanel>
Para visualizar a atualização do UpdatePanel, vamos alimentar o label “lblData” com a data atual no evento Command do nosso LinkButton :
protected void LinkButtonTeste_Command(object sender, CommandEventArgs e) { lblData.Text = DateTime.Now.ToString(); }
E agora como disparar uma atualização em determinado UpdatePanel com um controle(Button, LinkButton, etc) que esta inserido em minha GridView? A maneira acima não funcionará, pois a Trigger não enxerga o controle declarado em ControlID quando o controle esta na GridView. Neste caso, declare o evento RowDataBound da Grid em questão, onde dentro deste evento, faremos um FindControl para retornar o controle da linha e registrá-lo em tempo de execução:
protected void grdTeste_RowDataBound(object sender, GridViewRowEventArgs e) { //Procuro o controle na linha LinkButton lb = e.Row.FindControl("LinkButtonTeste") as LinkButton; //Se encontrou o controle, registro if (lb != null) ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(lb); }
Nosso front ficará da seguinte maneira:
<asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <asp:UpdatePanel ID="MeuUpdatePanel" runat="server" RenderMode="Inline"> <ContentTemplate> <asp:GridView ID="grdTeste" runat="server" AutoGenerateColumns="False" Width="100%" OnRowDataBound="grdTeste_RowDataBound"> <Columns> <asp:TemplateField HeaderText="Meu Controle"> <ItemTemplate> <asp:LinkButton ID="LinkButtonTeste" runat="server" OnCommand="LinkButtonTeste_Command">LinkButton Teste Grid</asp:LinkButton> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:Label ID="lblData" runat="server" Text="Vou carregar a data aqui"></asp:Label> </ContentTemplate> </asp:UpdatePanel>
Um Comentário
Tasso
14. set, 2013
Dica de ouro! Obrigado me ajudará muito
Deixe um comentário
You must be logged in to post a comment.