Una GridView custom per ASP.NET 2.0 con numero totale di righe

di Marco Leoncini, in UserScript, ASP.NET 2.0, DataBinding,

Tra i nuovi web control il GridView è sicuramente tra i più complessi. Non ha una corrispondente proprietà che nel DataGrid è chiamata VirtualItemCount con la quale era possibile leggere o impostare il numero totale di Item.
Per rimediare è necessario estendere la classe GridView creando un custom control che esponga la proprietà TotalRowCount.
Si può creare una nuova classe che derivi direttamente da GridView e salvarla nella cartella /App_Code/, qualora non si abbia una versione superiore alla Express, altrimenti è sufficiente creare una nuova class library:

namespace MyPersonalControl
{
  public class MyGridView : GridView{}
}

Dichiariamo un campo privato di tipo int dove memorizzeremo il numero totale di item:

private int totalRowCount;

Successivamente eseguiamo l'override del metodo InizializePager utilizzato dal runtime per inizializzare la riga del Pager quando la paginazione del GridView risulta attivata.

Il metodo riceve come argomenti la riga, un'istanza della classe GridViewRow, un intero che rappresenta il numero di colonne da unire ed infine un'istanza del tipo PagedDataSource.

Tra i membri esposti dalla classe PagedDataSource utilizzeremo la proprietà DataSourceCount che restituisce, nel caso di paginazione custom o server side, il valore della proprietà VirtualCount, altrimenti il numero totale di item contenuti nella fonte dati.

protected override void InitializePager(GridViewRow row, int columnSpan, PagedDataSource pagedDataSource)
{
  base.InitializePager(row, columnSpan, pagedDataSource);

  Literal lit = new Literal();
  totalRowCount = pagedDataSource.DataSourceCount;

  lit.Text = string.Concat("pagine totali: ", totalRowCount);
  row.Cells[0].Controls.Add(lit);
}

Richiamata l'imprementazione base del metodo, recuperiamo il valore della proprietà DataSourceCount memorizzandola nel campo totalRowCount ed impostiamo la proprietà Text di una nuova istanza del WebControl Literal prima di aggiungerlo al control tree del GridView.

Infine per comodità la esponiamo come proprietà pubblica.

[Bindable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Browsable(false)]
public int TotalRowCount
{
  get
  {
    return totalRowCount;
  }
}

Una volta registrato il controllo sarà possibile utilizzarlo nella nostra pagina come siamo abituati a fare con il GridView:

<%@ Register TagPrefix="ASPItalia" Namespace="MyPersonalControl" %>
<ASPItalia:MyGridView ID="GridView1" runat="server"
  AllowPaging="True"
  AutoGenerateColumns="true">
  ...
</ASPItalia:MyGridView>

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