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 -