Il controllo DataPager fornisce l'infrastruttura necessaria a paginare i controlli che implementano l'interfaccia IPageableItemContainer, come ad esempio il ListView.
L'interfaccia per la navigazione tra le pagine non è fornita direttamente dal DataPager, ma dalla collezione di oggetti DataPagerField definiti nella collezione Fields, rendendo possibile visualizzare contemporaneamente più tipi di navigazione.
ASP.NET 3.5 è fornito di tre tipi di DataPagerField:
- NextPreviousPagerField: per visualizzare i classici pulsanti di navigazione avanti/indietro;
- NumericPagerField: visualizza un pulsante per ogni pagina;
- TemplatePagerField: per una completa personalizzazione.
Benchè sia possibile coprire gran parte degli scenari di paginazione con i controlli rilasciati, può in alcuni casi essere necessario fornire una propria interfaccia, nel nostro caso dovremo poter cambiare pagina selezionandola da un elenco.
Estendiamo quindi la classe astratta DataPagerField ed implementiamo i due metodi astratti che definisce: HandleEvent, per gestire gli eventi che si verificano all'interno del DapaPagerField, e CreateDataPagers, il cuore del nostro pager personalizzato, in quanto crea l'interfaccia di navigazione.
public override void CreateDataPagers( DataPagerFieldItem container, int startRowIndex, int maximumRows, int totalRowCount, int fieldIndex ) { //calcolo in numero di pagine necessarie int _result = 0; int _itemNumber = Math.DivRem( totalRowCount, maximumRows, out _result ); int _selectedItemindex = startRowIndex / maximumRows; if ( _result > 0 ) { _itemNumber++; } DropDownList _dropDownList = new DropDownList(); //per ogni pagina creo un item for ( int i = 1 ; i < _itemNumber + 1 ; i++ ) { _dropDownList.Items.Add( new ListItem( i.ToString() )); } _dropDownList.AutoPostBack = true; //registo un event hadler per il cambio di pagina _dropDownList.SelectedIndexChanged += new EventHandler( _dropDownList_SelectedIndexChanged ); //aggiungo la DropDownList al contenitore container.Controls.Add( _dropDownList ); //imposto l'indice _dropDownList.SelectedIndex = _selectedItemindex; }
Nel metodo CreateDataPagers calcoliamo le pagine necessarie in base al numero di elementi visualizzati e al numero totale degli stessi, istanziamo una DropDownList e per ogni pagina creiamo infine un ListItem.
Continuiamo registrando un event handler per l'evento SelectedIndexChanged ed aggiungiamo la DropDownList nel suo contenitore.
void _dropDownList_SelectedIndexChanged( object sender, EventArgs e ) { int _page = -1; //recupero la pagina selezionata int.TryParse( ((DropDownList)sender).SelectedValue, out _page ); if ( _page > -1 ) { //e imposto la paginazione DataPager.SetPageProperties( ((_page -1) * DataPager.PageSize), DataPager.PageSize, true ); } }
Nel gestore dell'evento SelectedIndexChanged recuperiamo il valore selezionato dalla DropDownList ed utilizzando in metodo SetPageProperties, esposto dalla classe DataPager, impostiamo la pagina da visualizzare.
Nel metodo HandleEvent ci limiteremo a sollevare un'eccezione poiché il metodo non è utilizzato.
Non ci rimane che registrate il controllo ed utilizzarlo:
<%@ Register Namespace="MyControl" TagPrefix="My" %> <asp:datapager ID="MyDataPager" runat="server"> <Fields> <My:DropDownNumericPagerField / </Fields> </asp:datapager>
Commenti
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
- Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Creare una libreria CSS universale: Cards
- Eseguire script pre e post esecuzione di un workflow di GitHub