giovedì, marzo 09, 2006

GridView Events BUG! RowDeleting event firing twice

Condizioni: Gridview con una colonna CommandField per l'eliminazione, con l'opzione ButtonType="Image".
In alcuni casi, l'evento "RowDeleting" viene eseguito 2 volte di fila, creando non pochi problemi.
Infatti se nel gridview è presente una sola riga, la doppia esecuzione porta a un errore di indice; se invece sono presente 2 o più righe, queste vengono cancellate 2 per click.
Il bug, riconosciuto anche da Microsoft, non ha al momento un fix ufficiale, probabilmente verrà corretto in un prossimo service pack.
Ci sono 2 soluzioni ufficiose:
a) utilizzare un ButtonType="Button" o ButtonType="Link"
b) al posto della colonna CommandField utilizzare una colonna TemplateField in questo modo


<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton ID="ImageButton1" runat="server" CausesValidation="False" CommandName="Delete"
ImageUrl="~/admin/images/delete.gif" AlternateText="Cancella" OnClientClick="return confirm('Eliminare dal carrello?')" />
</ItemTemplate>
</asp:TemplateField>



#