Registrar Trigger no UpdatePanel de um Controle contido em uma GridView

Postado em 27. jul, 2012 por 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>
PS.: Não se esqueçam de incluir um ScriptManager na página.

Tags: , ,

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.