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.