Aggiungere un EmptyTemplate al Repeater

di Daniele Bochicchio, in ASP.NET, C#, Custom Server Controls,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi