Oggi, giusto per riprendermi dal mancamento di ieri (qui a Milano ci si scioglie), ho messo on-line un server control che ho implementato per facilitarmi un pochino la vita. L'ho chiamato "RepeaterPlus", proprio perchè estende le funzionalità base del web control Repeater di ASP.NET, aggiungendoci la paginazione. Lo potete trovare sotto la sezione "Projects", ma vi lascio cmq il link

http://www.peppedotnet.it/RepeaterPlus

Ho scelto questo tipo di approccio, perchè credo nelle potenzialità del repeater (al posto dei vari DataGrid e DataList), suprattutto per quanto riguarda l'output, che è totalmente personalizzabile da parte dello sviluppatore.
Per adesso il control non fa nient'altro che paginare i record inseriti come data source secondo un numero, scelto dall'utente, di record per pagina. Inoltre è possibile personalizzare il parametro di querystring utile ad indentificare il numero di pagina corrente e decidere se mettere la paginazione prima o dopo la visualizzazione dei record.
Ho messo anche vari esempi di codice sia in VB.NET che in C#, ed eccone qui uno:

<%@ Register TagPrefix="cc1" Namespace="Peppe.UI.WebControls" Assembly="Peppe.UI.WebControls" %>

...
<cc1:RepeaterPlus id="rep" runat="server"
AllowPaging="true"
RecordPerPage="2"
PagingParameterName="page"
PaginationPosition="Bottom"
>
<ItemTemplate>
<%# Container.DataItem %> <br />
</ItemTemplate>
<EmptyTemplate>Non ci sono record</EmptyTemplate>
</cc1:RepeaterPlus>

e nel code-behind:

protected Peppe.UI.WebControls.RepeaterPlus rep;


private void Page_Load(object sender, System.EventArgs e)
{
ArrayList lista = new ArrayList();
lista.Add("uno");
lista.Add("due");
lista.Add("tre");

rep.DataSource = lista;
rep.DataBind();
}

RepeaterPlus supporta qualsiasi tipo di data source che implementi l'interfaccia IEnumerable, ed è stato testato con successo con DataTable, DataView, DataSet ed ArrayList (i test sono disponibili nel file degli esempi).
Ho inoltre aggiungo un nuovo "template" (chiamato EmptyTemplate) utile a documentare il fatto che il data source legato al repeater, non ha record, o che non è stato asssociato alcun datasource al control. Questa tecnica l'ho appresa da questo articolo di Daniele Bochicchio di ASPItalia.com.
Le prossime features che vorrei aggiungere sono:
  • inserire il supporto per l'intellisense e il design di Visual Studio.NET
  • modificare la paginazione di molti record, e metterla di 10 in 10
  • aggiungere più tipi di paginazione (Es: solo numeri, next/prev, numeri e next/prev)
  • aggiungere funzionalità di sorting
Chiaramente se qualcuno ha suggerimenti, segnalazione di bug, critiche, se vuole partecipare al progetto o se ha intenzione di utilizzare il control nel proprio sito, la mia mail è sempre la stessa !