#681 - Aggiungere un EmptyTemplate al Repeater

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 http://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>


Approfondimenti

Commenti

Esprimi il tuo giudizio su questo script:

Per procedere devi essere autenticato.

crixo scrive:
#681 - Aggiungere un EmptyTemplate al Repeater

molto bello... ma c'è un problema/modifica da fare...se mettotitolo....no datail mio output in caso di mancnza di dati sarà// HeaderTemplatetitolo// ...
mercoledì 23 febbraio 2005 | 5 risposte

Per inserire un commento, devi registrarti alla nostra community.




IN EVIDENZA
MISC