24 messaggi dal 12 marzo 2012
Ho una ListView nella quale ho impostato un DataPager.
Oltre alla possibilità di cambiare pagina utilizzando i Button del DataPager, ho la necessità di organizzare una visualizzazione ciclica automatica e temporizzata delle diverse pagine.
Inoltre dovrei anche aggiornare i dati della ListView.
Per meglio spiegare:
1) Richiamo la pagina aspx.
2) Si popola la ListView dall'origine di dati e mostra la prima di es. 3 pagine.
3) Dopo xx secondi passa alla pagina 2
4) Dopo xx secondi passa alla pagina 3
5) A questo punto dopo xx secondi rilegge i dati dall'origine e riparte il ciclo.

Ho inserito la ListView in un UpdatePanel, ho aggiunto un Timer ma non so come scrivere il codice dell'evento tick del timer.

Grazie
Claudio

(sono bene accette anche solo indicazioni su cosa cercare in rete)
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

tonyontravel ha scritto:
Ho inserito la ListView in un UpdatePanel, ho aggiunto un Timer ma non so come scrivere il codice dell'evento tick del timer.


ciao, il DataPager ha le proprietà .StartRowIndex (indice del primo elemento di questa pagina), .MaximumRows (numero di elementi per pagina) e .TotalRowCount (numero totale di elementi) che ti danno tutte le informazioni necessarie a capire in che pagina ti trovi e quale sarà la pagina successiva da visualizzare.

Usa quelle informazioni con il metodo .SetPageProperties per cambiare la pagina del ListView che gli è collegato.

Procedi così:
  • nel Page_Load imposti il DataSource della ListView;
  • nell'evento Tick scrivi questo codice
    // voglio avanzare di pagina, quindi incremento l'indice corrente
    // del numero di elementi presenti in una pagina
    var nuovoIndice = dataPager.StartRowIndex + dataPager.MaximumRows;
    // Se l'indice ottenuto è pari o superiore al numero totale di elementi
    // allora significa che devo tornare alla prima pagina (cioè all'elemento con indice 0)
    if (nuovoIndice >= dataPager.TotalRowCount) nuovoIndice = 0;
    
    //imposto il nuovo indice
    dataPager.SetPageProperties(nuovoIndice, dataPager.MaximumRows, true);
    //faccio il databind della lista
    lista.DataBind();
    


ciao

Enjoy learning and just keep making
24 messaggi dal 12 marzo 2012
Grazie mille per la risposta, ci proverò, ma sembra abbastanza semplice.

Claudio
24 messaggi dal 12 marzo 2012
Ho dovuto riscriverlo in VB, ma non so come referenziare il datapager.

    
Protected Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim nuovoIndice As Integer, PagerCat1 As DataPager
????        PagerCat1 =   ??????
        nuovoIndice = PagerCat1.StartRowIndex + PagerCat1.MaximumRows
        If (nuovoIndice >= PagerCat1.TotalRowCount) Then
            nuovoIndice = 0
        End If
        PagerCat1.SetPageProperties(nuovoIndice, PagerCat1.MaximumRows, True)
        ListView1.DataBind()
    End Sub


questo è il datapager

                                                    <asp:DataPager ID="PagerCat1" runat="server" PagedControlID="ListView1" 
                                                PageSize="4">
                                                        <Fields>
                                                            <asp:NextPreviousPagerField 
                                                        ButtonType="Image"
                                                        ShowFirstPageButton="False" 
                                                        ShowLastPageButton="False"
                                                        ShowNextPageButton="False"
                                                        PreviousPageImageUrl="~/Immagini/pgprev.png" />
                                                            <asp:NextPreviousPagerField
                                                        ButtonType="Image"
                                                        ShowFirstPageButton="False" 
                                                        ShowLastPageButton="False"
                                                        ShowPreviousPageButton="False"
                                                        NextPageImageUrl="~/Immagini/pgnext.png" />
                                                        </Fields>
                                                    </asp:DataPager>
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao, puoi referenziare il datapager semplicemente accedendo alla variabile che porta il suo nome: PagerCat1.

Prova così:
Protected Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim nuovoIndice as Integer = PagerCat1.StartRowIndex + PagerCat1.MaximumRows
        If (nuovoIndice >= PagerCat1.TotalRowCount) Then
            nuovoIndice = 0
        End If
        PagerCat1.SetPageProperties(nuovoIndice, PagerCat1.MaximumRows, True)
        ListView1.DataBind()
    End Sub

Se non riesci a referenziare PagerCat1, probabilmente è perché si trova annidato dentro la ListView (ad es. nel LayoutTemplate) o comunque all'interno di un altro controllo che implementa INamingContainer. In questo caso, se ti è possibile, tiralo fuori da lì. Portalo allo stesso livello di ListView1.

ciao
Modificato da BrightSoul il 26 marzo 2012 21.27 -

Enjoy learning and just keep making
24 messaggi dal 12 marzo 2012
BrightSoul ha scritto:
ciao, puoi referenziare il datapager semplicemente accedendo alla variabile che porta il suo nome: PagerCat1.

Prova così:
Protected Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim nuovoIndice as Integer = PagerCat1.StartRowIndex + PagerCat1.MaximumRows
        If (nuovoIndice >= PagerCat1.TotalRowCount) Then
            nuovoIndice = 0
        End If
        PagerCat1.SetPageProperties(nuovoIndice, PagerCat1.MaximumRows, True)
        ListView1.DataBind()
    End Sub

Se non riesci a referenziare PagerCat1, probabilmente è perché si trova annidato dentro la ListView (ad es. nel LayoutTemplate) o comunque all'interno di un altro controllo che implementa INamingContainer. In questo caso, se ti è possibile, tiralo fuori da lì. Portalo allo stesso livello di ListView1.

ciao
Modificato da BrightSoul il 26 marzo 2012 21.27 -


Non funziona purtroppo, ho cercato spostandolo a diversi livelli, ma continuo a non riuscire a referenziarlo.

Per completezza aggiungo il listato completo dell'UpdatePanel

                        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                            <ContentTemplate>
                                <asp:Timer ID="Timer1" runat="server" Interval="10000">
                                </asp:Timer>
                                <asp:ListView ID="ListView1" runat="server" 
                                DataSourceID="ClassCat1">
                                    <ItemTemplate>
                                        <tr style="background-color: #E0FFFF;color: #333333;  max-height: 14px;">
                                            <td align="right">
                                                <asp:Label ID="Label1b" runat="server" 
                                Text='<%#DataBinder.Eval(Container, "DataItemIndex")+1%>' />
                                            </td>
                                            <td style="overflow:hidden">
                                                <asp:Label ID="NomeGiocatoreLabel" runat="server" 
                                Text='<%# Eval("NomeGiocatore") %>' />
                                            </td>
                                            <td align="center">
                                                <asp:Label ID="HcpGiocoLabel" runat="server" Text='<%# Eval("HcpGioco") %>' />
                                            </td>
                                            <td align="center">
                                                <asp:Label ID="RisultatoParLabel" runat="server" 
                                Text='<%# Eval("RisultatoPar") %>' />
                                            </td>
                                            <td align="center">
                                                <asp:Label ID="TotaleColpiLabel" runat="server" 
                                Text='<%# Eval("TotaleColpi") %>' />
                                            </td>
                                            <td align="center">
                                                <asp:Label ID="TotalePuntiLabel" runat="server" 
                                Text='<%# Eval("TotalePunti") %>' />
                                            </td>
                                        </tr>
                                    </ItemTemplate>
                                    <AlternatingItemTemplate>
                                        <tr style="background-color: #FFFFFF;color: #284775; max-height: 14px;">
                                            <td align="right">
                                                <asp:Label ID="Label1b" runat="server" 
                               Text='<%#DataBinder.Eval(Container, "DataItemIndex")+1%>' />
                                            </td>
                                            <td style="overflow:hidden">
                                                <asp:Label ID="NomeGiocatoreLabel" runat="server" 
                                Text='<%# Eval("NomeGiocatore") %>' />
                                            </td>
                                            <td align="center">
                                                <asp:Label ID="HcpGiocoLabel" runat="server" Text='<%# Eval("HcpGioco") %>' />
                                            </td>
                                            <td align="center">
                                                <asp:Label ID="RisultatoParLabel" runat="server" 
                                Text='<%# Eval("RisultatoPar") %>' />
                                            </td>
                                            <td align="center">
                                                <asp:Label ID="TotaleColpiLabel" runat="server" 
                                Text='<%# Eval("TotaleColpi") %>' />
                                            </td>
                                            <td align="center">
                                                <asp:Label ID="TotalePuntiLabel" runat="server" 
                                Text='<%# Eval("TotalePunti") %>' />
                                            </td>
                                        </tr>
                                    </AlternatingItemTemplate>
                                    <EmptyDataTemplate>
                                        <table runat="server" 
                                            style="background-color: #FFFFFF;border-collapse: collapse;border-color: #999999;border-style:none;border-width:1px;">
                                            <tr>
                                                <td>
                                                    Nessun Risultato
                                                </td>
                                            </tr>
                                        </table>
                                    </EmptyDataTemplate>
                                    <LayoutTemplate>
                                        <table runat="server">
                                            <tr runat="server">
                                                <td runat="server">
                                                    <table ID="itemPlaceholderContainer" runat="server" border="1" 
                                                        style="background-color: #FFFFFF;border-collapse: collapse;border-color: #999999;border-style:none;border-width:1px;font-family: Verdana, Arial, Helvetica, sans-serif; font-size:10px">
                                                        <tr runat="server" style="background-color: #016eaa">
                                                            <th runat="server" width="10" class="clCatInt">
                                                                N.
                                                            </th>
                                                            <th runat="server" width="100" style="overflow: hidden;" class="clCatInt">
                                                                Giocatore
                                                            </th>
                                                            <th runat="server" width="30" class="clCatInt">
                                                                Hcp
                                                            </th>
                                                            <th runat="server" width="30" class="clCatInt">
                                                                Par
                                                            </th>
                                                            <th runat="server" width="30" class="clCatInt">
                                                                Colpi
                                                            </th>
                                                            <th runat="server" width="30" class="clCatInt">
                                                                Punti
                                                            </th>
                                                        </tr>
                                                        <tr ID="itemPlaceholder" runat="server">
                                                        </tr>
                                                    </table>
                                                </td>
                                            </tr>
                                            <tr runat="server">
                                                <td runat="server" 
                                                    style="text-align: center;background-color: #5D7B9D;font-family: Verdana, Arial, Helvetica, sans-serif;color: #FFFFFF">
                                                </td>
                                            </tr>
                                            <tr id="Tr1" runat="server">
                                                <td id="Td1" runat="server" 
                                                    style="text-align: center;background-color: #016eaa;font-family: Verdana, Arial, Helvetica, sans-serif;color: #FFFFFF">
                                <asp:DataPager ID="PagerCat1" runat="server" PagedControlID="ListView1"  
                                                PageSize="4">
                                                        <Fields>
                                                            <asp:NextPreviousPagerField 
                                                        ButtonType="Image"
                                                        ShowFirstPageButton="False" 
                                                        ShowLastPageButton="False"
                                                        ShowNextPageButton="False"
                                                        PreviousPageImageUrl="~/Immagini/pgprev.png" />
                                                            <asp:NextPreviousPagerField
                                                        ButtonType="Image"
                                                        ShowFirstPageButton="False" 
                                                        ShowLastPageButton="False"
                                                        ShowPreviousPageButton="False"
                                                        NextPageImageUrl="~/Immagini/pgnext.png" />
                                                        </Fields>
                                </asp:DataPager>
                                                </td>
                                            </tr>
                                        </table>
                                    </LayoutTemplate>
------ Ho provato a spostarlo qui ------
                                </asp:ListView>
------ Ho provato a spostarlo qui ------
                            </ContentTemplate>
------ Ho provato a spostarlo qui ------
                        </asp:UpdatePanel>
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao, riprova, spostalo qui:
</asp:ListView>
Metti il datapager qui
</ContentTemplate>
Così il datapager si troverà allo stesso livello della ListView. Se riesci a referenziare ListView1 devi riuscire a fare lo stesso con PagerCat1.

Dopo aver spostato il datapager, lancia la pagina e se ti dà errore postane il testo e la riga.

ciao

Enjoy learning and just keep making
24 messaggi dal 12 marzo 2012
BrightSoul ha scritto:
Ciao, riprova, spostalo qui:
</asp:ListView>
Metti il datapager qui
</ContentTemplate>
Così il datapager si troverà allo stesso livello della ListView. Se riesci a referenziare ListView1 devi riuscire a fare lo stesso con PagerCat1.

Dopo aver spostato il datapager, lancia la pagina e se ti dà errore postane il testo e la riga.

ciao


Riga: 5
Errore: Sys.WebForms.PageRequestManagerServerErrorException: Riferimento a un oggetto non impostato su un'istanza di oggetto.

Partial Class ClassificheCat
    Inherits System.Web.UI.Page

    Protected Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim PagerCat1 As DataPager
        Dim nuovoIndice As Integer = PagerCat1.StartRowIndex + PagerCat1.MaximumRows
        If (nuovoIndice >= PagerCat1.TotalRowCount) Then
            nuovoIndice = 0
        End If
        PagerCat1.SetPageProperties(nuovoIndice, PagerCat1.MaximumRows, True)
        ListView1.DataBind()
    End Sub
End Class

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.