martedì 8 marzo 2011

GridView non esegue refresh dopo Delete.

Oppure in inglese GridView does not refresh after delete command.

Ho letto in molti siti e in molti blog che questa situazione si verifica in parecchi casi e nei più disparati.
OGNI CASO HA UNA SUA SOLUZIONE e hai me non esiste una soluzione che calzi per tutti i casi, questo perchè (e per fortuna ) ogniuno di noi scrive il codice a suo modo.

Il mio caso

Web user Control

update panel
gridView (con template command)
objectDataSource (con metodi Insert Update Delete)

in questa configurazione...

<asp:UpdatePanel ID="updUpdate" runat="server" UpdateMode="Conditional">



<asp:GridView ID="grvGridView" runat="server" AllowSorting="True"

AutoGenerateColumns="False"

DataKeyNames="IDofMyTable"

DataSourceID="odsMYTable"

onrowdatabound="grvGridView_RowDataBound"

onrowdeleting="grvGridView_RowDeleting"

onrowupdating="grvGridView_RowUpdating"

>



<Columns>

<asp:TemplateField ShowHeader="False">

<EditItemTemplate>

<asp:LinkButton ID="btnUpdate" runat="server" CausesValidation="True" CommandName="Update"

Text="Update" />

<asp:LinkButton ID="BtnCancel" runat="server" CausesValidation="False" CommandName="Cancel"

Text="Cancel" />

</EditItemTemplate>

<ItemTemplate>

<asp:LinkButton ID="BtnEdit" runat="server" CausesValidation="False" CommandName="Edit"

Text="Edit" />

<asp:LinkButton ID="btnDelete" runat="server" CausesValidation="True" CommandName="Delete"

Text="Delete"

/>

</ItemTemplate>

<ItemStyle HorizontalAlign="Center" CssClass="selectButton" Width="70px"/>

</asp:TemplateField>

...

</Columns>



<asp:ObjectDataSource ID="odsMYTable" runat="server"

SelectMethod="SelectAll" TypeName="PrimaryDataSetTableAdapters.MYTable"

UpdateMethod="UpdateRow"

DeleteMethod="DeleteRow" InsertMethod="Insert" >

<InsertParameters>

...

</InsertParameters>

<DeleteParameters>

<asp:Parameter DbType="Guid" Name="IDofMyTable"/>

</DeleteParameters>

<UpdateParameters>

...

</UpdateParameters>

</asp:ObjectDataSource>


Ora vediamo gli eventi ...

protected void grvGridView_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
//
// set key parameters to param
// e.keys[0].value
//
odsMYTable.DeleteParameters["IDofMyTable"].DefaultValue = e.Keys[0].ToString();

odsMYTable.Delete();
}


protected void grvGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
//
// set value to all field and
// set key parameters to param
// e.keys[0].value
//
odsMYTable.Update();
}


Questo per me ha funzionato, ma come anticipavo non esistono casi del tutto simili.

E' possibile che questa "situazione" si sia risolta per la rimozione di alcuni parametri dal Object data source generati in automatico da Ms.

Nessun commento: