AJAX: datagrid?

giovedì 20 marzo 2008 - 11.01

volperubbia Profilo | Senior Member

Ciao a tutti,
è da pochi giorni che "gioco" con ajax (sono un novizio quindi), ho già provato alcuni controllini presenti nell'ASP.NET AJAX Control Toolkit. Da dove partire ora per realizzare una datagrid / una gridview con ajax?
Vorrei, ad esempio, gestire l'aggiornamento di un "record" riducendo i postback della pagina ...

Qualche idea?
Davide

rossimarko Profilo | Guru

Ciao,

di sicuro il metodo più semplice è inserire un UpdatePanel che contenga la datagrid o la gridview. Questo però non vuol dire che sia il più efficiente. Potrebbe essere un buon compromesso nel caso in cui usi la paginazione e visualizzi poche righe, quindi hai pochi dati da gestire durante il postback e dal punto di vista dell'utente la fluidità del sito rimane abbastanza buona (poi dipende anche se stiamo parlando di un sito internet o di una intranet).

Altrimenti alcune alternative potrebbero essere quelle di sfruttare il framework client che fornisce la libreria Ajax e quindi creare dinamicamente i controlli di inserimento. Poi potresti effettuare gli aggiornamenti sfruttando delle chiamate a webservice, però i tempi di questa soluzione si allungano e non di poco.

volperubbia Profilo | Senior Member

Ciao, grazie ... sto facendo un po' di prove. Per esempio ...

<asp:ScriptManager ID="ScriptManager" runat="server" EnablePageMethods="True" EnableScriptLocalization="True" EnableScriptGlobalization="True"></asp:ScriptManager>

<asp:LinkButton ID="lnkBtnGo" runat="server" EnableViewState="False">Prova</asp:LinkButton>

<asp:UpdatePanel ID="updPanel" runat="server">
<ContentTemplate>
<asp:datagrid id="dg" runat="server" CellPadding="0">
<AlternatingItemStyle CssClass="DataGridAltItem"></AlternatingItemStyle>
<ItemStyle CssClass="DataGridItem"></ItemStyle>
<HeaderStyle CssClass="DataGridHeader" Wrap="False"></HeaderStyle>
<FooterStyle CssClass="DataGridHeader"></FooterStyle>
</asp:datagrid>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="lnkBtnGo" />
</Triggers>
</asp:UpdatePanel>

Verrei cliccare su lnkBtnGo e quindi richiamare lnkBtnGo_Click lato server per popolare la grid, ma senza fare il postback di tutta la pagina.

Private Sub lnkBtnGo_Click
dg.datasource = ...
dg.databind
End Sub

Come fare?

rossimarko Profilo | Guru


> <Triggers>
><asp:AsyncPostBackTrigger />
> </Triggers>

Hai già provato a specificare in modo esplicito il nome dell'evento?

<asp:AsyncPostBackTrigger ControlID="lnkBtnGo" EventName="Click" />

volperubbia Profilo | Senior Member

Si già provato ... ma senza successo.
Sto provando ora a cercare qualche esempio in rete su come gestire datagrid o gridview con ajax ... ancora nulla però.

Davide

rossimarko Profilo | Guru

Per caso Internet Explorer ti segnala degli errori javascript nella barra di stato in basso a sinistra? Potrebbe essere un errore dovuto ad un'errata configurazione del webconfig.

Io ho fatto una rapida prova e il codice che hai postato funziona correttamente

volperubbia Profilo | Senior Member

Ciao e grazie ancora per la pazienza ...
Hai ragione, è probabile manchi qualche impostazione. In allegato puoi vedere quello che ho fatto. Funziona, però non entra in modalità aiax. Infatti al click su lnkBtnGo passa sempre prima in Page_Load e quindi in lnkBtnGo_Click (che poi è il classico ciclo asp.net). Cosa potrebbe mancare?

Davide

rossimarko Profilo | Guru

Ti confermo che funziona correttamente. Ho tolto solo una paio di referenze nel webconfig di cui non avevo le dll.

Comunque ti allego il progetto di test così puoi verificare

volperubbia Profilo | Senior Member

Mistero. Ho riprovato con lo stesso prj che mi hai mandato ... ahimè niente da fare.
Se metto un break point su Page_Load o Page_PreRender e clicco sul Button, la pagina fa il ciclo completo. Io mi aspetterei di non passare dal Page_Load e dal Page_PreRender ... p.s.: di ajax ne so ancora poco ... lavori in corso.
Grazie comunque ... appena risolvo (spero) ti dico.

Davide

rossimarko Profilo | Guru

Ciao,

per quanto riguarda gli eventi non cambia nulla, vengono richiamati nello stesso ordine di prima. L'updatePanel si occupa semplicemente di renderizzare la porzione che gli compete in modo asincrono.

Se ti serve controllare se sei in un post back asincrono puoi verificare da codice la proprietà IsInAsyncPostBack del tuo controllo ScriptManager

volperubbia Profilo | Senior Member

Grazie.
La property IsInAsyncPostBack in effetti è true. Ho inserito nel tag BODY della pagina onload="javascript:alert('Page (Re)Loaded');", tutto ok, l'alert non scatta (a differenza di quanto succederebbe con un classico Button lato server).

Davide
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5