Se il Reapeater ha un difetto, è quello di non avere integrato al proprio interno un template specifico da mostrare nel caso in cui la DataSource non contenga dati al proprio interno.
Sfruttando il templating, caratteristica di ASP.NET spiegata in dettaglio su https://www.aspitalia.com/articoli/aspplus/databinding_templating.aspx, è possibile aggiungere facilmente a questo control (ma il discorso ed il codice valgono anche nel caso di DataGrid o DataList) un nuovo template specifico per la mancanza di dati, che chiameremo EmptyTemplate.
Comiciamo con il creare una nuova classe che erediti da Repeater e sovrascriva il rendering del controllo con una nostra funzione:
using System; using System.Web.UI; using System.Web.UI.WebControls; using System.ComponentModel; namespace ASPItalia.com.UI.WebControls { public class RepeaterEx : System.Web.UI.WebControls.Repeater { // proprietà per la definizione di un template da utilizzare quando non ci sono dati private ITemplate emptyTemplate; [TemplateInstance(TemplateInstance.Single)] public ITemplate EmptyTemplate { get {return emptyTemplate;} set {emptyTemplate = value;} } protected override void Render(HtmlTextWriter output) { // se non ci sono dati, istanzio il template if (this.Items.Count == 0 && EmptyTemplate != null) EmptyTemplate.InstantiateIn(this); base.Render(output); } } }
Per utilizzare il control con il nuovo template, ci basterà utilizzare questa forma:
<%@ Register tagPrefix="aspitalia" namespace="ASPItalia.com.UI.WebControls" assembly="ReapeterEx" %> <aspitalia:RepeaterEx id="repeater" runat="server"> <HeaderTemplate>Intestazione</HeaderTemplate> <ItemTemplate><%#Container.DataItem%></ItemTemplate> <EmptyTemplate>Spiacente, non ci sono dati disponibili.</EmptyTemplate> </aspitalia:RepeaterEx>
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Load test di ASP.NET Core con k6
Implementare il throttling in ASP.NET Core
Personalizzare l'errore del rate limiting middleware 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
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
I più letti di oggi
- Miglioramenti nelle performance di Angular 16
- Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
- HTML5 con CSS e JavaScript
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Ottimizzazione dei block template in Angular 17
- Disabilitare automaticamente un workflow di GitHub (parte 2)