è arrivato il Framework 3.5 e con lui una nuova versione di asp.net, la new entry più gradita è certamente il nuovo controllo ListView.
il ListView ha il non trascurabile pregio di unire la flessibilità del Repeater in quanto a definizione del layout, e le funzionalità evolute del GridView, come la paginazione.
in particolare la paginazione è interessante, in quanto svincolata dal controllo stesso e fornita invece attraverso un nuovo controllo, il DataPager.
il DataPager ha tra le sue caratteristiche la possibilità di visualizzare un numero variabili di campi utili alla navigazione tra le pagine, cose come l'avanti, indietro, numeri di pagina ecc ecc.
se nessuno dei campi preconfezionati si adattasse alla nostra veste grafica possiamo sempre ricorrere ha campi personalizzati o ad una Template.
la TemplatePagerField permette di dare libero sfogo alla vostra fantasia, Button, Link, DropDownList e chi più ne ha più ne metta.
ma ai me...dopo dovrete fare lo sporco lavoro di comunicare la nuova pagina e altre cosette al controllo da paginare, cosa che con il DataGrid in pensione non siamo più abituati a fare.
visto che uno in un progetto sicuramente utilizzeremo più di una volta il DataPager, e che con altrettanta probabilità lo utilizzeremo in tutti i nostri progetti, mi sono preso la briga di realizzarne uno che usa come Ui un UserControl.
la prima cosa da fare è estendere la classe TemplatePagerField:
namespace Soluzioni4D.WebControl { public class CustomTemplatePagerField : TemplatePagerField { public string PageTemplatePath { get { if (ViewState["PageTemplatePath"] == null) { return Resources.Navigation.PagerWebUserControl; } return (string)ViewState["PageTemplatePath"]; } set { ViewState["PageTemplatePath"] = value; } } public override ITemplate PagerTemplate { get { return null; } set { throw new NotSupportedException(); } } public override void CreateDataPagers(DataPagerFieldItem container, int startRowIndex, int maximumRows, int totalRowCount, int fieldIndex) { base.CreateDataPagers(container, startRowIndex, maximumRows, totalRowCount, fieldIndex); if (!string.IsNullOrEmpty(PageTemplatePath)) { IPagerAccessor _control = container.Page.LoadControl(PageTemplatePath) as IPagerAccessor; if (_control != null) { _control.PageSize = container.Pager.PageSize; _control.StartRowIndex = container.Pager.StartRowIndex; _control.TotalRowCount = container.Pager.TotalRowCount; container.Controls.Add((Control)_control); } } } protected override void OnPagerCommand(DataPagerCommandEventArgs e) { switch (e.CommandName) { case "Next": int _newNextIndex = e.Item.Pager.StartRowIndex + e.Item.Pager.PageSize; if (_newNextIndex <= e.TotalRowCount) { e.NewStartRowIndex = _newNextIndex; e.NewMaximumRows = e.Item.Pager.MaximumRows; } break; case "Previus": int _newPreviusIndex = e.Item.Pager.StartRowIndex - e.Item.Pager.PageSize; if (_newPreviusIndex >= 0) { e.NewStartRowIndex = _newPreviusIndex; e.NewMaximumRows = e.Item.Pager.MaximumRows; } break; } } } }
nel metodo CreateDataPager recuperiamo l'UserControl e impostiamo alcuni parametri, usi l'interfaccia IPagerAccessor perche nel mio UserControl voglio utilizzare alcune proprietà del DataPager.
infine il lavoro sporco e ripetitivo che saremmo stato costretti a inserire in ogni pagina, viene eseguito nel metodo OnPagerCommand.
infine l'UserControl, il codice è semplice :
public partial class Shared_UserControl_PagerWebUserControl : UserControlBase<object>, IPagerAccessor { public int TotalRowCount { get; set; } public int StartRowIndex { get; set; } public int PageSize { get; set; } }
infien L'userControl vero e proprio:
<%--Tasto indietro--%> <asp:LinkButton CssClass="PreviusButton" runat="server" CommandName="Previus" ID="_previusLinkButton"> <span> <asp:Literal ID="Literal1" runat="server" Text="<%$ Resources:Shared, Indietro %>" /> </span> </asp:LinkButton> <%-- Pagine --%> <div class="PagerInfo"> <div> <span> <asp:Literal ID="_pageLabel" runat="server" Text="<%$ Resources:Shared, Pagina %>"></asp:Literal> </span> <span> <asp:Literal ID="_currentPage" runat="server" Text="<%# TotalRowCount>0 ? (StartRowIndex / PageSize) + 1 : 0 %>"></asp:Literal> </span> </div> <div> <span> <asp:Literal ID="_ofPageLabel" runat="server" Text="<%$ Resources:Shared, PaginaDi %>"></asp:Literal> </span> <span> <asp:Literal ID="_totalPages" runat="server" Text="<%# Math.Ceiling ((double)TotalRowCount / PageSize)%>"></asp:Literal> </span> </div> </div> <%--Tasto avanti--%> <asp:LinkButton CssClass="NextButton" runat="server" CommandName="Next" ID="_nextLinkkButton"> <span> <asp:Literal ID="Literal2" runat="server" Text="<%$ Resources:Shared, Avanti %>" /> </span> </asp:LinkButton>
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Modificare il controllo TreeView, il 2 dicembre 2008 alle 19:27
- Perfezioniamo il ProfileDataSorce, il 13 ottobre 2008 alle 11:14
- Un DataSource per il Profile, il 10 ottobre 2008 alle 15:06
- TrueSpace 7 gratuito, il 24 luglio 2008 alle 10:59
- adesso dico la mia sull'Iphone, il 22 luglio 2008 alle 10:33
- Come tutto ebbe inizio, il 21 luglio 2008 alle 09:22