JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

¿El evento ItemCreated se ejecuta dos veces?

Pues sí. Esta situación es algo que despista bastante si no se tiene controlado (y uno se da cuenta, claro).

En los DataGrid de WebForms en ASP.NET el evento ItemCreated se puede ejecutar dos veces a partir de la primera carga de la página. Esto se debe a que cuando hacemos un PostBack a la página (es decir, pulsamos un botón o hacemos algo que genera un evento en el servidor) los contenidos de la rejilla de datos se regeneran a partir del ViewState de la página y por lo tanto se lanza el evento para cada fila. Si además volvemos a enlazar la rejilla para responder a una ordenación o paginación, ésta se vuelve a generar y por lo tanto se lanza de nuevo el evento ItemCreated.

Si usamos el evento ItemDataBound esto no ocurre ya que los contenidos la primera vez se regeneran desde el ViewState y por lo tanto no hay enlace de datos. En este caso el evento sólo se lanza una vez: al realizar el verdadero enlace.

Conclusión: si usas el evento ItemCreated ten en cuenta que, dependiendo de cómo se genere la página, éste se puede notificar dos veces durante un Postback. Para evitarlo sustitúyelo por el evento ItemDataBound o bien escribe código en el evento que verifique la situación para evitar que se degrade el rendimiento por una acción innecesaria en cada fila. Por ejemplo, como el evento ItemDataBound se produce sólo una vez y además antes del segundo evento ItemCreated (de haberlo) se uede usar un indicador que marque que ya se ha pasado por ItemDataBound y que por lo tanto estamos en el ItemCreated correcto (en el segundo, no en el del ViewState).


NOTA: Añado esta nota aclaratoria porque alguna gente me ha comentado que no le quedaba claro... Veamos, este efecto sólo se produce si el DataGrid contiene elementos que se almacenan en el ViewState de la página y que, por consiguiente, se envían de nuevo al servidor durante el Postback. Es durante la regeneración de controles a partir del PostBack cuando se produce el efecto comentado, en otro caso no.
José Manuel Alarcón
Banner

Agregar comentario