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.

💪🏻 ┬┐Este post te ha ayudado?, ┬┐has aprendido algo nuevo?
Pues NO te pido que me invites a un caf├ę... Te pido algo m├ís f├ícil y mucho mejor

Escrito por un humano, no por una IA