Come utilizzare correttamente una SPGridView con UpdatePanel (AJAX)
Salve a tutti,
qualche giorno fa ho cominciato a sviluppare una semplice web part, un po’ per studio e un po’ per lavoro, che visualizzasse un elenco Sharepoint con una SPGridView così come nella pagina standard “AllItems.aspx” degli elenchi MOSS2007 ma con funzionalità di paginazione ed ordinamento di tipo AJAX.
Un ottimo punto di partenza per tutto ciò è stato l’articolo seguente:
http://www.sharethispoint.com/archive/2007/02/28/Using-a-SPGridView-inside-an-ASP.net-Ajax-UpdatePanel.aspx
L’autore di questo articolo sembrava proprio voler fare la stessa cosa che mi ero prefissato anche io. Ho seguito il suo esempio passo passo ed alla fine mi sono imbattuto nel suo stesso “Know problem” :)
For some weird reason the first time you use the pagination or sorting it does a refresh of the entire page, but every time after that it works correctly. Kind of a tweaky little bug, if any one figures out why this is happening please let me know. The updatepanel only seems to do this with the SPGridView.
Il problema riscontrato è alquanto fastidioso e, tra l’altro, non si verifica unicamente alla prima paginazione o al primo ordinamento assoluto. Infatti se oltre alla SPGridView vengono inseriti altri controlli all’interno della web part, dopo che sono stati eseguiti i postback parziali su questi ultimi si ripristina la condizione in cui alla prima paginazione o al primo ordinamento la pagina presenta un “full postback”.
Ancora una volta ci viene in aiuto l’amico Google con il seguente thread
http://social.msdn.microsoft.com/forums/en-US/sharepointdevelopment/thread/2ba1228b-a27f-4991-b974-f14a976ce917/
in cui c’è un riferimento ad un altro articolo
http://aspadvice.com/blogs/name/archive/2007/07/17/Dynamically-Register-an-Asynchronous-Postback-Control-with-a-ScriptManager.aspx
che risolve definitivamente il problema.
In effetti sembra che per il controllo SPGridView (ma mi viene da pensare che questo problema riguardi anche la più semplice GridView) debba essere direttamente registrato per l’AsyncPostBack.
Saluti
Luigi