Visualizzare contemporaneamente EmptyDataTemplate e InsertItemTemplate del ListView di ASP.NET 3.5

di Marco Leoncini, in ASP.NET 3.5, DataBinding, LinqDataSource,

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

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