Hace un par de días comenté el efecto de ejecución doble de ItemCreated que se podía dar al enlazar ciertos DataGrids en una página Web. Una forma posible e evitarlo (entre otras muchas) sería redefinir el evento LoadViewState de la página para marcar con un indicador booleano cuándo se está ejecutando, una cosa así:

private boolean RestaurandoViewState = false;

protected override void LoadViewState(object savedState)
{
     this.RestaurandoViewState = true;
     base.LoadViewState(savedState);
     this.RestaurandoViewState = false;
}

De este modo durante el evento ItemCreated sólo tenemos que comprobar si se está restaurando el ViewState o no, ejecutando el código sólo en caso de que no.

Escrito por un humano, no por una IA