Potremo definire il ListView come il controllo definitivo, ha tutte le caratteristiche avanzate del GridView, ma senza i limiti nella definizione del layout che invece contraddistinguono quest'ultimo.
Ciò nonostante alcune scelte fatte in fase di progettazione del ListView potrebbero non essere condivisibili, come ad esempio l'impossibilità di visualizzare l'EmptyDataTemplate, se contemporaneamente si visualizza l'InsertItemTemplate.
Questo comportamento può essere modificato eseguendo l'ovveride del metodo CreateChildControls, in particolare l'overload che restituisce il numero degli elementi creati.
Per prima cosa creiamo una nuova classe che estenderà il ListView, per abilitare o meno la visualizzazione contemporanea dei due template aggiungiamo una proprietà chiamata AlwaysShowEmptyDataTemplate.
public bool AlwaysShowEmptyDataTemplate { get { bool? _value = (bool?)ViewState["AlwaysShowEmptyDataTemplate"]; if (_value.HasValue) { return _value.Value; } else return false; } set { ViewState["AlwaysShowEmptyDataTemplate"] = value; } }
Continuiamo eseguendo l'override del metodo CreateChildControl, recuperiamo il numero di item restituito dall'implementazione base ed il valore della proprietà AlwaysShowEmptyDataTemplate, se necessario richiamiamo il metodo CreateEmptyDataItem, un metodo helper che la classe ListView espone appositamente per estendere il ListView e creare l'EmptyDataTemplate.
protected override int CreateChildControls(IEnumerable dataSource, bool dataBinding) { int _itemCount = base.CreateChildControls(dataSource, dataBinding); if (AlwaysShowEmptyDataTemplate && _itemCount == 0) CreateEmptyDataItem(); return _itemCount; }
Non ci rimane che inserire la classe nella cartella App_Code o in una libreria di classi e registare il nostro controllo per essere utilizzato nelle pagine.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Implementare il throttling in ASP.NET Core
Effettuare il binding di date in Blazor
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Load test di ASP.NET Core con k6
Usare ASP.NET Core dev tunnels per testare le applicazioni su internet
Catturare la telemetria degli eventi di output cache in ASP.NET Core
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Taggare la output cache in base al routing in ASP.NET Core
Short-circuiting della Pipeline in ASP.NET Core
Cache policy su route groups di Minimal API in ASP.NET Core 7
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes