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
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Implementare il throttling in ASP.NET Core
Load test di ASP.NET Core con k6
Effettuare il binding di date in Blazor
Short-circuiting della Pipeline in ASP.NET Core
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes