104 messaggi dal 15 maggio 2003
www.descor.com
Ciao,

sto provando a fare il custompaging di un gridview attraverso l'uso di un ObjectDataSource.

Ho impostato il gridview in questo modo:

            <asp:GridView ID="Grid" runat="server" Height="200px" Width="600px" style="left: 40px; position: absolute; top: 256px" AllowPaging="True" CellPadding="4" DataKeyNames="ID........</asp:GridView>


In pratica ho settato a True l' EnablePaging.


Poi ho inserito nella pagina aspx un componente ObjectDataSource e ho settato i parametri in questo modo :

<asp:ObjectDataSource ID="myODS" runat="server" EnablePaging="True" MaximumRowsParameterName="maxPage"
                SelectCountMethod="getTotaleRows" SelectMethod="getRows" StartRowIndexParameterName="startPage"
                TypeName="TestGrid._Default"></asp:ObjectDataSource>


ed il codebehind con "l'aggancio" al grid :

  ...
  myODS.SelectMethod = "getRows"
  myODS.SelectCountMethod = "getTotalRows"

  Grid.DataSource = myODS  'attacco al grid il datasource
  Grid.DataBind()
  ...


dove getRows e getTotalRows sono 2 funzioni così fatte :

    Public Function getRows(ByVal clausolaWhere As String, ByVal maxPage As Integer, ByVal startPage As Integer) As DataTable 

    Dim myQuery As String = "select comprensorio,edificio,piano,vano,id_comprensorio,id_edificio,id_piano,id_vano " & _
                      "from " & schema & "vani " & clausolaWhere & "order by piano,vano"
        Return ExecuteQuery(myQuery, startPage, maxPage).Tables(0)
    End Function

    Public Function getTotalRows(ByVal clausolaWhere As String) As Integer
        If Me.ViewState("ItemsCount") Is Nothing Then
            Dim myQuery As String = "select count(*)" & _
                                 "from " & schema & "vani " & clausolaWhere & "order by piano,vano"
            Dim counter As Integer = ExecuteScalar(myQuery)
            Me.ViewState.Add("ItemsCount", counter)
            Return counter
        Else
            Return Me.ViewState("ItemsCount")
        End If
    End Function


Ovviamente creo un parametro clausolaWhere che aggiungo al SelectParameter dell'oggetto myODS !
Il problema è che ogni volta che passo da una pagina all'altra, oltre a prelevare il subset di record di interesse, rifaccio sempre la query del count per conoscere il n° totale di righe. Ho pensato di utilizzare il viewstate per non rifare sempre questa query, ma purtroppo non funziona in quanto il viewstate è sempre a Nothing, o meglio viene settato la prima volta ma come esco dalla funzione getTotalRows questo viewstate viene "perso". Stessa cosa se metto una textbox al posto del viewstate, all'interno delle 2 funzioni sopracitate non riesco ad accedere al textbox. Per cui penso che quelle operino in un contesto totalmente differente dalla pagina aspx.

Oppure mi sono perso qualche passaggio fondamentale.


Grazie per l'aiuto.
Modificato da La Fayette il 22 settembre 2006 17.40 -

- La Fayette -
così facendo viene creata una nuova istanza della classe page, che non contiene nessun valore nel viewstate.

meglio se sposti tutta la logica in una classe.

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
Forse magari risolvi tutto non impostando il datasource a mano ma impostando semplicemente la proprietà DataSourceID della gridview su myODS. Non chiamare te il metodo DataBind a mano, s'arrangia il gridview

Ciao

Il mio blog
Homepage

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.