17 messaggi dal 28 giugno 2002
Ciao a tutti,

ho un "problema" con il datagrid:

ho inserito un datagrid e popolo il datasource con un datatable ottenuto tramite una query su db, sono circa 1000 record.

Ho implementato la paginazione come ho sempre fatto, ovvero nell'evento PageIndexChanged imposto l'indice della nuova pagina e quindi rifaccio il bindig dei dati.

Fin qui tutto a posto, funziona la paginazione, funziona il sort, funziona tutto.

Quando mi sono accorto che il ViewState era estremamente grande ho deciso di disabilitare il ViewState al datagrid.

A questo punto ho notato che la paginazione funziona solo per le prime 10 pagine, passando all'undicesima pagina il paginatore mi fa vedere il secondo gruppo di pagine, dalla 11 fino alla 20, clicco sulla pagina 12 e il datagrid ritorna alla seconda pagina e il paginatore visualizza il primo gruppo di 10 pagine.

Se riabilito il ViewState funziona tutto correttamente.

Tengo a precisare che il datasource lo imposto sia nel page_load sia dopo aver impostato il currenpageindex nell'evento PageIndexChanged.
17 messaggi dal 28 giugno 2002
Grazie per la risposta ma volevo solo sapere se qualcuno ha notato questo strano comportamento.

So come si usano i datagrid e come si abilita la paginazione.
fino ad ora non avevo avuto la necessita di visualizzare cosi tanti record ed è evidente che in questo caso è preferibile una paginazione custom attraverso la quale puoi lavorare con un numero limitato di record per volta.

Se non mi sono espresso bene nel descrivere il problema dimmelo che rispiego meglio qual'è il problema e magari posto pure un po di codice, ciaoo


Ricciolo ha scritto:
Guarda questo articolo
http://www.aspitalia.com/articoli/aspplus/paginazione.aspx
lo sai la cosa strana, ho disattivato più volte il viewstate, e a me la paginazione non funzionava propio, come è gisuto che sia visto che il viewstate viene utilizzato per conservare il numero di pagina corrente ed altre cosette, che ti smetta di funzionare dopo 10 pagine è stranissimo

ciao marco

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

http://nostromo.spaces.live.com/default.aspx
17 messaggi dal 28 giugno 2002
lo so che è normale che il datagrid, non mantenendo più nessuna informazione in quanto il viewstate è disabilitato, non sappia più in quale pagina si trova e tutta un altra serie di informazioni.
Quando il viewstate è disabilitato devo essere io a memorizzare queste info, se mi sposto di pagina il valore della pagina corrente lo devo memorizzare in session e quando faccio il post back devo prendere il valore dalla session e impostare la relativa proprietà al datagrid.

Perfetto mi sta bene cosi, preferisco avere un int in session piuttosto che un viewstate enorme.

A questo punto non è più strano il comportamento che ho segnalato, se vuoi ti passo lo zip con il codice cosi puoi renderti conto:
se metti in debug e fai due test ti accorgi che
il valore di e.NewPageIndex dell'oggetto DataGridPageChangedEventArgs nell'evento PageIndexChanged
è sempre uguale all'effettiva pagina nel caso di viewstate abilitato, mentre in caso contrario rappresenta il numero della pagina nel gruppo visualizzato, ossia se nel pager sono visualizzate le pagine dalla 11 alla 20 e io clicco su 13 il valore di e.NewPageIndex è uguale a 3 perchè è la terza pagina. Ciò che non viene memorizzato internamente dal datagrid è il gruppo di pagine visualizzate.

Il tutto si risolve come detto mettendo il valore di e.newpageindex in session e ogni volta che si fa un postback si imposta la proprietà CurrentPageIndex. Il datagrid si basa su questa proprietà per stabilire il valore di e.NewPageIndex.




nostromo ha scritto:
lo sai la cosa strana, ho disattivato più volte il viewstate, e a me la paginazione non funzionava propio, come è gisuto che sia visto che il viewstate viene utilizzato per conservare il numero di pagina corrente ed altre cosette, che ti smetta di funzionare dopo 10 pagine è stranissimo

ciao marco
quello che scrivi è giusto ,tempo fa gestivo solo l'evento ItemCommand, e recuperavo

e.CommandArgument per il numero di pagina non ho mai avuto problemi (per adesso)

se vuoi manda pure il codice a nostromo_@hotmail.it

ciao marco

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

http://nostromo.spaces.live.com/default.aspx
Non guardare solo il viewstate però, perché se sfrutti la paginazione del DataGrid devi passare l'intero DataSet contenente i dati oppure il DataReader deve caricare tutti i record fino ad arrivare alla pagina che vuoi visualizzare.
Non è il massimo per il server.

Ciao

Il mio blog
Homepage
17 messaggi dal 28 giugno 2002
Si hai ragione ma anche l'elaborazione del viewstate ad ogni postback rihiede tempo e memoria sul server, e questo l'ho notato un po di tempo fa su un applicativo: avevo notato che il sito era piuttosto lento e che il processo asp_net utilizzava molta memoria, quindi come prima prova ho disabilitato il viewstate usando la session; dopo questa modifica il sito era molto più veloce e il server usava molta meno memoria.

Credo di scoprire l'acqua calda se dico che bisogna trovare la giusta via di mezzo tra l'uso del viewstae, della session, della cache e cosi via.
Magari si può costruire un sito cercando di parametrizzare la modalità di salvataggio delle informazioni tra un post e l'altro.

Ciao


Ricciolo ha scritto:
Non guardare solo il viewstate però, perché se sfrutti la paginazione del DataGrid devi passare l'intero DataSet contenente i dati oppure il DataReader deve caricare tutti i record fino ad arrivare alla pagina che vuoi visualizzare.
Non è il massimo per il server.

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.