58 messaggi dal 11 maggio 2002
Salve sto cercando di far funzionare la paginazione di un repeater aggiungendola usando la classe che utilizza il controllo Datagrid cioè System.Web.Ui.Control.PagedDataSource.
Passo i valori ad una query da un menù Javascript mi appaiono i primi 5 prodotti (ho impostato cosi la paginazione !!) poi quando clicco il bottone nex vedo i numeri che vanno avanti barra dell'indirizzo di Explorer tipo Webform6.aspx?Page=2 clicco ....Webform6.aspx?Page=3 e via dicendo ma i dati non si riassociano. Non capisco come posso fare ho provato anche a inserire nella procedura che lancio al click del tasto NEXT gli stessi valori del menu javascript che uso per estrarre i prodotti dal database... Incollo il codice ...
Forse sono le query?? Premetto che senza paginazione funzionano a meraviglia.. Ho letto diversi articoli in merito a questo sistema per paginare ma nessuno poneva il caso che la query prendesse come variabili dei valori estratti con Querystring...nel mio caso sono una MARCA una FAMIGLIA e una SOTTOFAMIGLIA...


Dim pagedData As New PagedDataSource

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' If Not (IsPostBack) Then
doPaging()
' End If
End Sub

Function getTheData(ByVal strsortfield As String) As DataTable
Dim filterValue1 As String = Request.QueryString("marca")
Dim filterValue3 As String = Request.QueryString("famiglia")
Dim filterValue2 As String = Request.QueryString("sottofamiglia")
Dim DS As New DataSet
Dim strConnect As New SqlConnection(System.Configuration.ConfigurationSettings.AppSettings("SqlConnection1.ConnectionString"))
Dim objSQLAdapter As SqlDataAdapter

strConnect.Open()
If filterValue1 = "Tutti i prodotti" Then

objSQLAdapter = New SqlDataAdapter("SELECT A.Articolo, P.RagSoc, M.Reparto,T.Tipodispositivo,T.Notapubb,T.Descri,ESP.c_id, L.Prz - L.Prz * L.Sconto1 / 100 AS Prz, SUM(A.QtaIniz) + SUM(A.QtaEntrata) - SUM(A.QtaUscita) AS Disp1 " & _
"FROM ArtQta A " & _
"INNER JOIN Articoli T ON A.Articolo = T.Articolo " & _
"INNER JOIN Produtt P ON T.Produttore = P.Produtt " & _
"INNER JOIN ArtListi L ON A.Articolo = L.Articolo " & _
"INNER JOIN CtPrd C ON T.CatProd = C.Categoria " & _
"INNER JOIN ArtMerce M ON T.Articolo = M.Articolo " & _
"INNER JOIN CtPrdSt S ON T.SotCatProd = S.SottoCtPRd " & _
"INNER JOIN ArtFisca F ON A.Articolo = F.Articolo " & _
"LEFT JOIN ESPRINET_CATALOGOCOMPLETO ESP ON ESP.codice_articolo = T.Articolo " & _
"WHERE (L.Listino = '" & Session("scontoCliente") & "') AND (T.Disattivo = '0') AND (A.Esercizio = '2006') AND (F.Esercizio = '2006') " & _
"AND (S.Descri ='" & filterValue3 & "' AND C.Descri = '" & filterValue2 & "') " & _
"GROUP BY A.Articolo, T.Descri, P.RagSoc, L.Prz, M.Reparto,T.Notapubb,ESP.c_id,T.Tipodispositivo, L.Sconto1 " & _
"ORDER by '" & strsortfield & "'", strConnect)


ElseIf filterValue1 <> "Tutti i prodotti" Then


objSQLAdapter = New SqlDataAdapter("SELECT A.Articolo, P.RagSoc, M.Reparto,T.Tipodispositivo,T.Notapubb,ESP.c_id,T.Descri,L.Prz As Prpub,L.Sconto1 As Scdeal,L.Prz - L.Prz * L.Sconto1 / 100 AS Prz, SUM(A.QtaIniz) + SUM(A.QtaEntrata) - SUM(A.QtaUscita) AS Disp1 " & _
"FROM ArtQta A " & _
"INNER JOIN Articoli T ON A.Articolo = T.Articolo " & _
"INNER JOIN Produtt P ON T.Produttore = P.Produtt " & _
"INNER JOIN ArtListi L ON A.Articolo = L.Articolo " & _
"INNER JOIN CtPrd C ON T.CatProd = C.Categoria " & _
"INNER JOIN ArtMerce M ON T.Articolo = M.Articolo " & _
"INNER JOIN CtPrdSt S ON T.SotCatProd = S.SottoCtPRd " & _
"INNER JOIN ArtFisca F ON A.Articolo = F.Articolo " & _
"LEFT JOIN ESPRINET_CATALOGOCOMPLETO ESP ON ESP.codice_articolo = T.Articolo " & _
"WHERE (L.Listino = '" & Session("scontoCliente") & "') AND (T.Disattivo = '0') AND (A.Esercizio = '2006') AND (F.Esercizio = '2006') " & _
"AND (P.RagSoc ='" & filterValue1 & "' AND C.Descri = '" & filterValue2 & "' AND S.Descri = '" & filterValue3 & "') " & _
"GROUP BY A.Articolo, T.Descri, P.RagSoc, L.Prz, M.Reparto,T.Tipodispositivo,ESP.c_id,T.Notapubb, L.Sconto1 " & _
"ORDER by '" & strsortfield & "'", strConnect)

End If

objSQLAdapter.Fill(DS, "customers")

Return DS.Tables("customers").Copy
End Function

Sub doPaging()

pagedData.DataSource = getTheData("descri").DefaultView
pagedData.AllowPaging = True
pagedData.PageSize = 5

Try
pagedData.CurrentPageIndex = Integer.Parse(Request.QueryString("Page")).ToString()
Catch ex As Exception
pagedData.CurrentPageIndex = 0
End Try

btnPrev.Visible = (Not pagedData.IsFirstPage)
btnNext.Visible = (Not pagedData.IsLastPage)

Repeater1.DataSource = pagedData
Repeater1.DataBind()
End Sub



Private Sub btnPrev_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrev.Click
Response.Redirect(Request.CurrentExecutionFilePath & "?Page=" & (pagedData.CurrentPageIndex - 1))
End Sub

Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click
Response.Redirect(Request.CurrentExecutionFilePath & "?Page=" & (pagedData.CurrentPageIndex + 1))

End Sub
32 messaggi dal 26 ottobre 2005
Se posso darti un consiglio, secondo me la cosa è strutturata male.

Prima di tutto in questo caso ti conviene dimenticare il Javascript visto che cmq devi fare un post back.

Ti suggerisco di fare così:

- la query che estrae i dati ti conviene eseguirla solo una volta, nel page load nel caso Not IsPostBack, e poi la memorizzi nella cache. In questo modo eviti di fare una query ad ogni avanzamento di pagina.

- ti crei una proprietà "PaginaCorresnte" e la fai leggere e scrivere dal ViewState, in questo modo ad ogni PostBack sai quale pagina stavi visualizzando.

- Nei medoti collegati al click dei pulsanti "Succ" e "Prev" devi far incrementare o decrementare la pagina corrente e subito dopo chimare il metodo doPaging.

- A questo punto metodo doPagina() non farà altro che leggere dalla cache il DataTable con i dati, impostare la CurrentPageIndex con la PaginaCorrente e fare il DataBind. AH, tieni presente che la CurrentPageIndex ovviamente parte da zero come tutto nell'informatica.

Fine.

Se hai un po' di tempo da perderci ti consiglio di crearti uno UserControl il più possibile astratto che gestisce la paginazione. Ti garantisco che fa comodo averlo in un milione di occasioni.

Spero di essere stato il più possibile chiaro nella spiegazione.
A presto

Stefano

Se vuoi il massimo... devi essere pronto a pagare il massimo!
58 messaggi dal 11 maggio 2002
Sono riuscito a far funzionare la cosa correttamente aggiungendo nei bottoni questo che vedi sotto ma ho dovuto togliere la procedura che richiamo da Is not postback. Funziona bene vedro di approfondire quanto tu dicevi per evitare di eseguire la query completa ogni volta e poi spezzettarla !!! qualche spunto per creare la proprietà pagina corrente di cui parlavi o qualche articolo qui su apitalia ????
grazie


Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click
Response.Redirect(Request.CurrentExecutionFilePath & "?&Page=" & (pagedData.CurrentPageIndex + 1) & "&sottofamiglia=" & Request.QueryString("sottofamiglia") & "&famiglia=" & Request.QueryString("famiglia") & "&marca=" & Request.QueryString("marca"))
End Sub

*********************************************************

Private Sub btnPrev_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrev.Click
Response.Redirect(Request.CurrentExecutionFilePath & "?&Page=" & (pagedData.CurrentPageIndex - 1) & "&sottofamiglia=" & Request.QueryString("sottofamiglia") & "&famiglia=" & Request.QueryString("famiglia") & "&marca=" & Request.QueryString("marca"))
End Sub
32 messaggi dal 26 ottobre 2005
Beh, la proprietà "PaginaCorrente" altro non è che una semplice proprietà mappata sul ViewState, puoi scriverla così:


    Private Property paginaCorrente() As Integer
        Get
            Return CType(ViewState.Item("PAGCORR"), Integer)
        End Get
        Set(ByVal Value As Integer)
            ViewState.Add("PAGCORR", Value)
        End Set
    End Property



in questo modo hai una proprietàche mantiene lo stato da un PostBack all'altro.

Ciao

Stefano

Se vuoi il massimo... devi essere pronto a pagare il massimo!
58 messaggi dal 11 maggio 2002
devo sicuramente cambire la procedura aggiungendo al viewstate dei valori anche perche cosi gli eventi scatenati con itemcommand tipo inserimento in un carrello del prodotto non vanno ma una cosa non riesco a capire al viewstate devo aggiungere solo il currentpageindex ? o la query sql intera (non credo!!)

Devo aggiungerli nell' evento on load della pagina ??

tipo cosi :

Dim paginacorrente as String = pageddata.currentpageindex"
ViewState("PAGCORR") = paginacorrente

mah credo essere lontano dalla soluzione .....

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.