#642 - Un DataGrid con un numero di pagina e record totali

Mi è capitato più volte di dovere includere e popolare label e div esterni ad un datagrid per dare all'utente informazioni riguradanti la paginazione (numero delle pagine, totale degli items...).
La ripetitività di quest'operazione mi ha spinto ad estendere la clase DataGrid per ottenere automaticamente questo riepilogo senza dover intervenire ogni volta sulle singole pagine e sul relativo code behind.
Vediamo una delle possibili soluzioni per realizzare tutto questo.
Iniziamo con il creare una nuova classe che eredita da DataGrid:

using System;
using System.Web.UI.WebControls;

namespace It.WebProfessor.WebControls {
[ToolboxData("<{0}:WpDataGrid runat=server>")]
public class WpDataGrid : System.Web.UI.WebControls.DataGrid
{

Quindi aggiungiamo alla nuova classe una proprietà che utilizzaremo per abilitare o meno questo riepilogo:

[
Category("Behavior"),
DefaultValue(true),
Description("Abilita il riepilogo della paginazione")
]
public bool UsePageStats {
  get {
    object obj1 = this.ViewState["UsePageStats"];
    if (obj1 != null) {
      return ((bool) obj1);
  }
  return false;
}
set {
  this.ViewState["UsePageStats"] = value;
  }
}

Manteniamo invariato il costruttore della classe da cui ereditiamo

public WpDataGrid() : base(){}

Per arrivare a creare il nostro riepilogo:

protected override void Render( System.Web.UI.HtmlTextWriter output){
  int tot = ((System.Collections.ICollection)this.DataSource).Count;

  System.Text.StringBuilder sb = new System.Text.StringBuilder();
  sb.Append( "\n<div id=\""+ this.ClientID +"_PageInfo\">" );
  sb.Append( "<span>" );
  sb.Append( "Totale Records: <b>" + tot.ToString() + "</b>" );
  sb.Append( " - " );
  sb.Append( "Pagina <b>" + (this.CurrentPageIndex+1).ToString() + "</b>" );
  sb.Append( " di " );
  sb.Append( "<b>" + this.PageCount.ToString() + "</b>" );
  sb.Append( "</span>" );
  sb.Append( "</div>\n" );

  if(this.AllowPaging && this.UsePageStats)
  output.Write( sb.ToString() );

  base.Render(output);
}

A questo punto non ci resta che includere nella pagina il nostro controllo e trattarlo come un comune DataGrid ad eccezione della nuova proprietà UsePageStats.

<%@ Register TagPrefix="cc1" Namespace="It.WebProfessor.WebControls" Assembly="WebProfessor" %>
<cc1:WpDataGrid id="dg1" AllowPaging="True" UsePageStats="True" />

Questa vuole essere solo un'idea su come ottenere questo riepilogo e su come partire da un oggetto del framework per ottenerne una personalizzazione in linea con le proprie esigenze di sviluppo.


Approfondimenti

Commenti

Esprimi il tuo giudizio su questo script:

Per procedere devi essere autenticato.

Per inserire un commento, devi registrarti alla nostra community.




IN EVIDENZA
MISC