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
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Load test di ASP.NET Core con k6
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Implementare il throttling in ASP.NET Core
Effettuare il binding di date in Blazor
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Short-circuiting della Pipeline in ASP.NET Core
I più letti di oggi
- Riordinare le righe di una GridView di ASP.NET con jQuery
- Creazione di un alarm con suono personalizzato con Windows Phone 7.1
- Utilizzare la session affinity con Azure Container Apps
- Blue-green deployment con Azure Web App e DevOps
- Ed infine anche il calendario :)
- Configurare la diagnostica di Azure attraverso Visual Studio
- Recuperare la data di creazione di un tag tramite una pipeline YAML di Azure DevOps
- Microsoft Security Bulletin MS05-002
- .NET Core e dispositivi IoT
- Eseguire attività pianificate con Azure Container Jobs