Seguendo le indicazioni di questo sito http://aspnet.4guysfromrolla.com/articles/021308-1.aspx ho paginato un listview usando un datapager esterno, customizzando il Templatepagerfield.
Il paginatore effettivamente appare come voglio sul page load ma non funzionano i link alle pagine del listview e addirittura il datapager scompare quando seleziono una pagina diversa dalla attiva.
Questo è il datapager (uso una tabella perchè sto cercando di usare lo stesso stile usato per altri controlli di tipo gridview in giro per il mio sito):
E questo è il codice lato server con il quale inserisco le pagine e gestisco il click per il cambiopagina:codice:<asp:DataPager ID="DataPager1" runat="server" PagedControlID="ListView1" PageSize="3"> <Fields> <asp:TemplatePagerField> <PagerTemplate> <div id="divv" runat="server" class="pagination-ys" > <table runat="server" id="tabpager"> <tbody> <tr> </tr> </tbody> </table> </div> </PagerTemplate> </asp:TemplatePagerField> </Fields> </asp:DataPager>
Noto che il codice che viene generato sulla pagina html è un po' diverso da come dovrebbe venire, in particolare nella funzione JS chiamata dal link manca il secondo parametro con l'indicazione della pagina!:codice:Protected Sub Listview1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListView1.DataBound Dim currentPage As Integer = (DataPager1.StartRowIndex / DataPager1.PageSize) + 1 Dim totalPages As Integer = DataPager1.TotalRowCount / DataPager1.PageSize Dim lbl As Label, lnk As LinkButton Dim ph As HtmlGenericControl = DataPager1.Controls(0).FindControl("divv") Dim tb As HtmlTable = ph.FindControl("tabpager") For i As Integer = 1 To totalPages Dim td = New HtmlTableCell If i = currentPage Then 'creo una label dentro alla cella lbl = New Label lbl.Text = i lbl.CssClass = "pagination-ys" td.Controls.Add(lbl) Else 'creo un link dentro alla cella lnk = New LinkButton lnk.Attributes.Add("pag", i) lnk.CssClass = "pagination-ys" lnk.Text = i 'gli attacco il codice da eseguire sul click AddHandler lnk.Click, AddressOf PageJump td.Controls.Add(lnk) End If tb.Rows(0).Cells.Add(td) Next End Sub Protected Sub PageJump(ByVal sender As Object, ByVal e As System.EventArgs) Dim lnk As LinkButton = CType(sender, LinkButton) Dim pageNo As Integer = Convert.ToInt32(lnk.Attributes.Item("pag")) Dim startRowIndex As Integer = (pageNo - 1) * DataPager1.PageSize DataPager1.SetPageProperties(startRowIndex, DataPager1.PageSize, True) End Sub
Cosa sbaglio o cosa devo eventualmente modificare/aggiungere?codice:'codice del paginatore di un gridview che funziona <div class="pagination-ys"> <table> <tbody> <tr> <td> <span>1</span> </td> <td> <a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$GV_opeaperti','Page$2')">2</a> </td> </tr> </tbody> </table> </div> 'codice generato per il mio paginatore che non funziona <div id="ContentPlaceHolder1_DataPager1_ctl00_divv" class="pagination-ys"> <table id="ContentPlaceHolder1_DataPager1_ctl00_tabpager"> <tbody> <tr> <td> <span>1</span> </td> <td> <a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$DataPager1$ctl00$ctl04','')" pag="2">2</a> </td> </tr> </tbody> </table> </div>

Rispondi quotando