Immaginiamo di aver creato la nostra applicazione Blazor con una QuickGrid che visualizzi dati variabili nel tempo. Potrebbe trattarsi di quotazioni in borsa, come negli esempi che abbiamo realizzato negli scorsi script, oppure semplicemente essere dovuto alla concorrenza, con altri utenti che manipolano le stesse entità.
In ogni caso ci troviamo in un contesto in cui vogliamo effettuare il refresh dei dati nella QuickGrid a causa di un evento esterno, quindi non dopo l'interazione dell'utente, come abbiamo visto nei precedenti esempi.
La nostra pagina è dotata di una QuickGrid che, tramite un ItemsProvider, effettua chiamate a una API:
<QuickGrid class="table" ItemsProvider="@forecastsProvider" Pagination="@pagination"> <PropertyColumn Property="@(x => x.Date)" Format="yyyy-MM-dd" IsDefaultSortColumn="true" InitialSortDirection="SortDirection.Ascending" /> <PropertyColumn Property="@(x => x.Summary)" /> <PropertyColumn Property="@(x => x.TemperatureC)" /> <PropertyColumn Property="@(x => x.TemperatureF)" /> </QuickGrid> <Paginator State="@pagination" /> @code { private PaginationState pagination = new PaginationState() { ItemsPerPage = 10 }; private GridItemsProvider<WeatherForecast>? forecastsProvider; private ValueTask<GridItemsProviderResult<WeatherForecast>> GetItemsAsync(GridItemsProviderRequest<WeatherForecast> request) { // .. altro codice qui .. } protected override async Task OnInitializedAsync() { this.forecastsProvider = GetItemsAsync; } }
Per poter forzare un refresh dei dati, dobbiamo innanzitutto assegnare la griglia a una variabile (theGrid, nel nostro caso) tramite l'attributo Ref:
@implements IDisposable <QuickGrid ... @ref="theGrid"> ... </QuickGrid> <Paginator State="@pagination" /> @code { //.. altro codice qui .. private Timer _timer; private QuickGrid<WeatherForecast> theGrid; private GridItemsProvider<WeatherForecast>? forecastsProvider; protected override async Task OnInitializedAsync() { this.forecastsProvider = GetItemsAsync; _timer = new Timer(async _ => { await InvokeAsync(async () => { Console.WriteLine("Weather: Refreshing data"); await theGrid.RefreshDataAsync(); }); }, null, 0, 5000); } public void Dispose() { _timer.Dispose(); } }
Nel codice in alto, all'interno di OnInitializedAsync, creiamo un Timer che scatti ogni 5 secondi, nel cui metodo di callback invochiamo RefreshDataAsync di QuickGrid, che scatenerà un refresh dei dati.
Attenzione a due aspetti importanti: innanzitutto la chiamata RefreshDataAsync avviene all'interno di un InvokeAsync. Questo perché l'evento del Timer viene scatenato in un thread diverso da quello della UI, e, come avviene dai tempi di Windows Forms, ogni evento che genera una modifica dell'interfaccia deve essere scatenato nel thread UI.
Inoltre, l'intera pagina (o componente) implementa IDisposable, così da poter effettuare il dispose del timer ed evitare che questo continui a scatenare l'evento di callback anche dopo che l'utente abbia navigato via dalla pagina corrente.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Il nuovo controllo Range di Blazor 9
Integrare un servizio esterno con .NET Aspire
Documentare i servizi REST con Swagger e OpenAPI con .NET 9
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
Selettore CSS :has() e i suoi casi d'uso avanzati
Gestione dell'annidamento delle regole dei layer in CSS
Utilizzare WebJobs su Linux con Azure App Service
Introduzione alle Container Queries
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Gestione CSS in Blazor con .NET 9
Referenziare un @layer più alto in CSS
Utilizzare Container Queries nominali
I più letti di oggi
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Chiamare direttamente un numero di telefono con HTML5