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>
- Rilasciata la Preview 2 di ASP.NET AJAX 4.0.
- A volte ritornano... GridView vs Repeater vs ListView vs Custom
- Il modo più facile per far andare ASP.NET 3.5 sul vostro server
- #26 - HttpHandler per XAP non registrato in IIS
- Cosa fare se la vostra applicazione ASP o ASP.NET è vittima di SQL injection
- #922 - Utilizzare il metodo Page.SetFocus per impostare il focus all'interno della form
- Extension Method per semplificare la Reflection
- Future Web Conference e .NET 3.5
- BookStore Pubs 2.1
- #933 - Una GridView con supporto per più righe selezionabili
- #927 - Un HttpModule per passare automaticamente da HTTP a HTTPS
- #936 - Aggiungere una riga con il totale calcolato al GridView
Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
Davvero interessante.Strano però che in un controllo così complesso e completo manchi questa informazione.Prendendo spunto da questo esempio ho creato...
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.







Stampa
Snippet
Download


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
E' possibile avere una "traduzione" in VB???Please;-)))
Continua »»» | Rispondi »»»