Nello scorso script (https://www.aspitalia.com/script/1484/Filtrare-Dati-QuickGrid-Blazor-Drop-Down-List.aspx) abbiamo mostrato un esempio di filtering dei dati di una QuickGrid in Blazor, realizzato tramite una Select list posta a inizio pagina.
La griglia, tuttavia, supporta anche la possibilità di aggiungere questi filtri sulle singole colonne, tramite dei template personalizzati denominati ColumnOptions.
Riprendiamo allora il codice dello scorso esempio, e modifichiamolo come segue:
<QuickGrid Items="LoadData()" Pagination="@pagination"> <PropertyColumn Title="Company" Property="@(x => x.CompanyName)" Sortable="true"> <ColumnOptions> <input type="text" @bind="@searchTerm" placeholder="Search..." /> </ColumnOptions> </PropertyColumn> <PropertyColumn Title="Industry" Property="@(x => x.Industry.Name)" Sortable="true"> <ColumnOptions> <select @bind="@selectedIndustryId"> @if (_industries == null) { <option>... loading ...</option> } else { <option value="0">(all)</option> @foreach (var industry in _industries) { <option value="@industry.Id" >@industry.Name</option> } } </select> </ColumnOptions> </PropertyColumn> <PropertyColumn Title="Value" Property="@(x => x.Value)" Format="c" Sortable="true" /> </QuickGrid>
Come possiamo notare, nelle colonne Company e Industry abbiamo specificato due template all'interno di ColumnOptions:
- nel caso di Company, si tratta di una semplice casella di testo, il cui valore è in binding con un field chiamato searchTerm;
- Industry, invece, sfrutta la medesima select list che abbiamo visto nello scorso esempio, con il binding dell'elemento selezionato su selectedIndustryId.
Il codice di LoadData non deve far altro che sfruttare queste due variabili per restituire la query corretta:
private IQueryable<Share> LoadData() { if (_industries == null) { _industries = data.Industries.ToList(); this.StateHasChanged(); } IQueryable<Share> result = data.Shares.Include(x => x.Industry); if (selectedIndustryId != 0) { result = result.Where(x => x.Industry.Id == selectedIndustryId); } if (!string.IsNullOrWhiteSpace(searchTerm)) { result = result.Where(x => x.CompanyName.Contains(searchTerm)); } return result; }
Il risultato finale sarà simile a quello della figura in basso:
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Evitare il flickering dei componenti nel prerender di Blazor 8
Sostituire la GitHub Action di login su private registry
Utilizzare QuickGrid di Blazor con Entity Framework
Aprire una finestra di dialogo per selezionare una directory in WPF e .NET 8
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
Utilizzare la funzione EF.Parameter per forzare la parametrizzazione di una costante con Entity Framework
Gestire il colore CSS con HWB
Creare una libreria CSS universale: i bottoni
Sviluppare un'interfaccia utente in React con Tailwind CSS e Preline UI
Il nuovo controllo Range di Blazor 9
I più letti di oggi
- Simulare Azure Cosmos DB in locale con Docker
- Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
- .NET Conference Italia 2023 - Milano e Online
- .NET Conference Italia 2024 - Milano
- Configurare lo startup di applicazioni server e client con .NET Aspire
- MS03-45: risolti i problemi della patch 824141
- Utilizzare Container Queries nominali