Nello script 74 (https://www.silverlightitalia.com/script/74/Paginazione-Dati-Controllo-DataPager-Silverlight-3.0.aspx) abbiamo visto come utilizzare il controllo DataPager per visualizzare a video un numero ristretto di record, per gestire al meglio la leggibilità da parte dell'utente e contenere l'uso delle risorse.
Punto chiave dell'esempio è la necessità comunque di avere tutti i dati da gestire, nonostante ne vengano visualizzati solo alcuni, con l'onere quindi di dover chiedere ad un servizio molti più dati di quelli che potrebbero essere visualizzati dall'utente.
Nel contesto di una applicazione Silverlight, che usa WCF Ria Services come strato per l'accesso ai dati, possiamo effettuare una vera paginazione richiedendo al server solo i dati effettivamente visualizzati.
Possiamo implementare questa funzionalità con estrema facilità grazie al controllo DomainDataSource che possiamo usare come gestore intermedio dei dati tra il servizio (il DomainContext) e i controlli incaricati della visualizzazione.
Per il suo utilizzo dobbiamo referenziare l'assembly System.Windows.Controls.DomainServices.dll presente nella cartella:
\Program Files\Microsoft SDKs\RIA Services\v1.0\Libraries\Silverlight, e come di consueto, registrare il namespace corrispondente per il suo utilizzo nel markup.
<riacontrols:DomainDataSource x:Name="AdventureWorksDomainDataSource" QueryName="GetCustomers" PageSize="10" LoadSize="20"> <riacontrols:DomainDataSource.DomainContext> <web:AdventureWorksDomainContext /> </riacontrols:DomainDataSource.DomainContext> <riacontrols:DomainDataSource.SortDescriptors> <riacontrols:SortDescriptor PropertyPath="CompanyName" /> </riacontrols:DomainDataSource.SortDescriptors> </riacontrols:DomainDataSource> <data:DataGrid ItemsSource="{Binding Data, ElementName=AdventureWorksDomainDataSource}" /> <data:DataPager Source="{Binding Data, ElementName=AdventureWorksDomainDataSource}" />
Nel codice dell'esempio, il DataGrid ha come sorgente dati direttamente la proprietà Data del DomainDataSource, così come il DataPager: in questo modo è esso stesso automaticamente incaricato di accedere al servizio attraverso il metodo specificato nell'attributo QueryName.
Con PageSize possiamo specificare il numero di righe da visualizzare, mentre con LoadSize impostiamo quante effettivamente devono essere restituite dal servizio: con i valori del nostro esempio andiamo a precaricare più elementi di quelli visualizzati in modo da diminuire l'attesa dell'utente durante la paginazione.
Nell'immagine possiamo vedere l'esigua quantità di KB richiesti:

Una particolarità: per il corretto funzionamento del controllo DataPager è importante specificare un ordinamento alla query del servizio. Nel nostro esempio lo abbiamo specificato direttamente nel markup del DomainDataSource.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Supportare lo HierarchyID di Sql Server in Entity Framework 8
Recuperare automaticamente un utente e aggiungerlo ad un gruppo di Azure DevOps
Creare una libreria CSS universale: Clip-path
Ricevere notifiche sui test con Azure Load Testing
Eseguire query in contemporanea con EF
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Utilizzare QuickGrid di Blazor con Entity Framework
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
Creare un webhook in Azure DevOps
Gestione dell'annidamento delle regole dei layer in CSS
Creare una libreria CSS universale: Nav menu
Conoscere il rendering Server o WebAssembly a runtime in Blazor
I più letti di oggi
- a #RealCodeConf4 il 25 maggio a Firenze parleremo di #silverlight4. iscrizioni gratis su http://u.aspitalia.com/g9
- #HTML5 schema per avere l'intellisense su #VS2008 (anche express) http://u.aspitalia.com/ed
- Parallelizzare le chiamate HTTP con async/await e le Promise in JavaScript
- Rendere sicuro l'endpoint di HealthCheck in ASP.NET Core
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!