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

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:

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

Nota: Questo script contiene un allegato.


Approfondimenti
Commenti

Esprimi il tuo giudizio su questo script:

Per procedere devi essere autenticato.

lucascat scrive:
venerdì 30 maggio 2008 | 2 risposte
gyppo scrive:
#810 - Una GridView custom per ASP.NET 2.0 con numero totale di righe

Davvero interessante.Strano però che in un controllo così complesso e completo manchi questa informazione.Prendendo spunto da questo esempio ho creato...
martedì 5 dicembre 2006 | 2 risposte

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.