è 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>
Daniele Bochicchio ha scritto:
questo è uno script per unoscript@lgiorno...
beccato subito
naturalmente lo pacchettizzo pulisco e lo scriptizzo
azz sul blog non mi rimane che dedicarmi a WPF...dove la P non sta presentation
ciao marco
Modificato da nostromo il 19 febbraio 2008 16.36 -
nostromo wrote:
beccato subito
: D
non è che sei andato molto lontano... potevi nasconderti meglio!
Daniele Bochicchio ha scritto:
beccato subito
non è che sei andato molto lontano... potevi nasconderti meglio!![]()
LOL pensavo che nel posto dove ero più in vista nessuno mi avrebbe notato
ciao marco
Modificato da nostromo il 19 febbraio 2008 18.23 -
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.





Stampa
Download

10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
Marco Leoncini wrote:
questo è uno script per unoscript@lgiorno...
Continua »»» | Rispondi »»»