Un DataGrid con un numero di pagina e record totali

di Cristiano Degiorgis, in UserScript, ASP.NET, ADO.NET,

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.

[code lang="aspx"]<%@ 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.

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