Poner el foco en un TextBox que están dentro de un UpdatePanel cuando se produce un postback asíncrono

Hoy estaba realizando unas modificaciones en una aplicación y entre ellas estaba el modificar un control de usuario, poner el foco en un textbox de un edittemplate de un gridview que recoge anotaciones de los usuarios. La cosa es que el gridview está dentro de un UpdatePanel y si optamos por esta solución, nos encontraremos que no funciona:

TextBox textAnotacion = (TextBox)e.Row.FindControl("textAnotacion");
textAnotacion.Focus();

Creo debe ser porque como es un postback asíncrono, sino lo gestionamos a través del ScriptManager que es el encargado de renderizar el contenido del UpdatePanel, no actualiza el foco del TextBox en el caso de usar el método Focus() del control, que sí funciona en el caso de no utilizar UpdatePanel(postback síncrono).

Para que nos funcione correctamente, debemos usar el método SetFocus() del ScriptManager y en mi caso como el ScriptManager está en la MasterPage tengo que utilizar el método GetCurrent(Page) para obtener una instancia del mismo:

TextBox textAnotacion = (TextBox)e.Row.FindControl("textAnotacion");
ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
scriptManager.SetFocus(textAnotacion);

 

Salu2

Published 26/12/2007 17:50 por Luis Ruiz Pavón
Comparte este post:
http://geeks.ms/blogs/lruiz/archive/2007/12/26/poner-el-foco-en-un-textbox-que-est-225-n-dentro-de-un-updatepanel-cuando-se-produce-un-postback-as-237-ncrono.aspx

Comentarios

# re: Poner el foco en un TextBox que están dentro de un UpdatePanel cuando se produce un postback asíncrono

Hola espinete:

En el evento RowDataBound(object sender, GridViewRowEventArgs e)

Salu2

Thursday, December 27, 2007 10:20 AM por Luis Ruiz Pavón

# re: Poner el foco en un TextBox que están dentro de un UpdatePanel cuando se produce un postback asíncrono

Excelente, buscaba y buscaba y nada, y tan sencilla la solucion, de verdad...

Mil gracias...

Tuesday, January 8, 2008 4:21 AM por ricardo chois

# re: Poner el foco en un TextBox que están dentro de un UpdatePanel cuando se produce un postback asíncrono

Gracias a tí ;)

Salu2

Tuesday, January 8, 2008 12:13 PM por Luis Ruiz Pavón

# re: Poner el foco en un TextBox que están dentro de un UpdatePanel cuando se produce un postback asíncrono

Muy buena esta opción... y lo mejor super sencilla.

Thursday, January 10, 2008 6:53 PM por Carlos E.

# re: Poner el foco en un TextBox que están dentro de un UpdatePanel cuando se produce un postback asíncrono

muy tip, tendras alguno para realizar servisios de WEB [Webmethod] en C#

Saludos

Wednesday, January 23, 2008 12:57 AM por victor

# re: Poner el foco en un TextBox que están dentro de un UpdatePanel cuando se produce un postback asíncrono

No entiendo muy bien tu pregunta...

Saludos

Thursday, January 24, 2008 9:51 AM por Luis Ruiz Pavón

# re: Poner el foco en un TextBox que están dentro de un UpdatePanel cuando se produce un postback asíncrono

Hola!

gracias! estuve buscando la solución por todos lados y me la distes! muy bueno! gracias!

Tuesday, March 25, 2008 3:05 PM por Patricia Miyagi

# re: Poner el foco en un TextBox que están dentro de un UpdatePanel cuando se produce un postback asíncrono

Hola , necesito una ayuda , tengo una grilla con con Templates , un boton para editar los ItemTemplates , solucione lo del problema del cursor usando esto:

private void focoEdicion(int indiceFila,GridView grilla,string control)

       {

           GridViewRow fila = grilla.Rows[indiceFila];

           ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);            

           scriptManager.SetFocus((fila.FindControl(control)));

       }

esta funcion ubica el foco cuando EDITO una fila

mi funcion de editar es:

protected void imgModificarPais_Click(object sender, ImageClickEventArgs e)

       {

           if(this.hiddenFieldPais.Text.Length!=0)

           {

               this.ISBtxtAccionPais.Text = "EP";                

               int indiceFila = //Aqui ubico la fila que quiero editar

               this.ISBgvPais.EditIndex = indiceFila;                

               ListarPaises();

               focoEdicion(indiceFila, this.ISBgvPais, "txtPais");                    

           }                

       }

pero parece que tener este codigo que me selecciona la fila a editar:

protected void ISBgvPais_SelectedIndexChanged(object sender, EventArgs e)

       {

           int fila = ISBgvPoblacion.SelectedIndex + 1;

           this.hiddenFieldPoblacion.Text = fila.ToString();

       }//con esto selecciono la fila

mantiene seleccionada la fila de la grilla , lo que hace que scriptmanager , ubiqe foco , pero PROBLEMA , cuando quiero ubicarme el otro lado del la caja de texto, al final o al medio ,al parecer hace postback y no me deja ubicarme , pierdo el foco =S.

Por favor si me podrias ayudar seria de lo mejor , gracias

Saturday, May 10, 2008 1:49 AM por devsoftx

# re: Poner el foco en un TextBox que están dentro de un UpdatePanel cuando se produce un postback asíncrono

Muy Bien ... gracias

Tuesday, September 9, 2008 9:36 PM por ger2008

# re: Poner el foco en un TextBox que están dentro de un UpdatePanel cuando se produce un postback asíncrono

No te imaginas todo el tiempo que estuve buscando una solución al problema este (en realidad no era el mismo, pero uno muy similar) y nunca encontré nada. Hoy de casualidad llegue a tu blog y me encontré con esta sorpresa. Muchas gracias!

Saturday, December 6, 2008 6:34 PM por Gerardo Contijoch

# re: Poner el foco en un TextBox que están dentro de un UpdatePanel cuando se produce un postback asíncrono

Estimado MIL MIL gracias, estube con este problema por mucho tiempo te felicito la solucion simple y precisa, reitero mis agradecimento

Wednesday, January 28, 2009 12:56 PM por Juan Carlos Paz

# re: Poner el foco en un TextBox que están dentro de un UpdatePanel cuando se produce un postback asíncrono

quiero poner el foco, pero al final de algun texto, que tenga ya escrito en el textbox c#

Tuesday, March 31, 2009 1:29 AM por Juan Ricardo

# re: Poner el foco en un TextBox que están dentro de un UpdatePanel cuando se produce un postback asíncrono

Gracias, funciona perfecto

Friday, June 19, 2009 11:50 PM por Orlando

# re: Poner el foco en un TextBox que están dentro de un UpdatePanel cuando se produce un postback asíncrono

mil gracias estuve buscando mucho tiempo una solucion, probe como mil y no me funcionaba

y por fin encontre esta pagina

y me funciono correctamente...

sin necesidad de escribir mucho codigo

Thursday, October 29, 2009 7:22 PM por Martha Oralia

# re: Poner el foco en un TextBox que están dentro de un UpdatePanel cuando se produce un postback asíncrono

Estimado, yo tengo un problema similar me puedes ayudar; uso Ajas con asp .net. quiero q al presionar enter esta funcione como tab, que vaya al siguiente textbox; he probado con muchas opciones y no he podido solucionar. mis textbox tienes autopostback por lo que cunado le dor enter y si no hubo modificacion del textbox se pierde el enfoque.

Saturday, November 28, 2009 12:31 AM por Jc rr