Multiview e GridView

martedì 18 febbraio 2014 - 19.46

biroph Profilo | Junior Member

Salve,
ho una pagina nella quale ci sono 2 miltiview, ognuna delle quali contiene 3 gridview su 3 view.
Al load della pagina carico le grid, ma quando clicco sulla multiviuew1, le griglie nella multiview2 (postback) perdono lo stato.
C'è un modo per evitare di fare sempre il databind nel pageload?

Grazie per l'aiuto.

ridaria Profilo | Expert

>Salve,
>ho una pagina nella quale ci sono 2 miltiview, ognuna delle quali
>contiene 3 gridview su 3 view.
>Al load della pagina carico le grid, ma quando clicco sulla multiviuew1,
>le griglie nella multiview2 (postback) perdono lo stato.

Perdono lo stato?
Cosa intendi? Che i dati vengono ricaricati ad ogni postback?


>C'è un modo per evitare di fare sempre il databind nel pageload?
Certo che c'è.

Si tratta di persistenza di dati.

Ad ogni postback l'evento load riparte e viene eseguito tutto ciò che è in esso contenuto, quindi i databind delle griglie.
Devi semplicemente verificare, nell'evento load se è un postBAck o no, e se lo è non esegui il databind.
ESEMPIO:

If Not IsPostBack Then 'Non è un postback, cioè è la prima chiamata alla pagina e quindi carica tutto

fai il databind delle griglie
else ' è un postback
fai qualcosa altro
end if

>
>Grazie per l'aiuto.
prego

FAmmi sapere


Riccardo D'Aria

biroph Profilo | Junior Member

Ciao, grazie della risposta.
Nel pageload io eseguo il databind delle 3 gridview, e imposto la proprietà ActiveViewIndex = 0 della multiview, per visualizzare la prima view.
Se eseguo il databind solo nel !IsPosBack, quando clicco sui pulsanti associati alla multiview per visualizzare la view con indice = 1, la gridview contenuta in essa è vuota.
In alternativa, se sotto il pulsante su cui clicco eseguo il caricamento (databind) della sola gridview che voglio visualizzare, le gridview nella multiview2 si svuotano e perdono lo stato.

Info aggiuntive: le gridview hanno una header che viene costruita e caricata dinamicamente, il datasource è una List<T> che contingono oggetti custom.

la multiview con le e gridview sono inserite in un ascx che replico 2 volte su una pagina aspx.

spero di essermi spiegato bene.

Grazie per l'aiuto

ridaria Profilo | Expert

Adesso non ti seguo più?

Cosa vuoi fare?
Quando vuoi caricare le griglie?

Se le carichi nell'evento page load, e se non metti alcuna gestione del postback, stai certo che ad ogni click di uqalunque pulsante presente nella pagina si riverifica il databind delle griglie!

Fammi sapere


Riccardo D'Aria

biroph Profilo | Junior Member

il caricamento delle griglie deve avvenire nel page_load solo se non si tratta di postback.
Mi sono accorto che una delle 3 griglie mantiene sempre lo stato, ma le altre due lo perdono ogni qualvolta si effettua un postback, senza effettuare databind delle grliglie.
la differenza tra la griglieA che mantiene lo stato e le griglie B e C è che sia B che C hanno un header costruito dinamicamente, mentre A visualizza la header di default (i nomi dei campi).
Ho provato a non far creare la header dinamicamente e tutto funziona correttamente, sia B che C mantengono lo stato.
Il problema è che ho bisogno che le header vengano caricate da codice, perchè hanno una struttura un pò particolare (rowspan e altro), ma devo anche assicurarmi di non dover effettuare il databind ogni volta che si esegue un postback, perchè rallenta molto l'esecuzione della pagina.
In alternativa ho bisogno di creare un Header, anche staticamente, che abbia la struttura richiesta dal cliente. (vedi allegato)
spero di essere stato più esaustivo :)

Grazie per l'aiuto.

ridaria Profilo | Expert

>il caricamento delle griglie deve avvenire nel page_load solo
>se non si tratta di postback.
>Mi sono accorto che una delle 3 griglie mantiene sempre lo stato,
>ma le altre due lo perdono ogni qualvolta si effettua un postback,
>senza effettuare databind delle grliglie.
>la differenza tra la griglieA che mantiene lo stato e le griglie
>B e C è che sia B che C hanno un header costruito dinamicamente,
>mentre A visualizza la header di default (i nomi dei campi).
>Ho provato a non far creare la header dinamicamente e tutto funziona
>correttamente, sia B che C mantengono lo stato.

Tutto allora dipende da qui, perché è strano che se hai il databind al di fuori dei postback, queste griglie vengono bindate anche durante un postBAck.

Deve esserci qualcosa che cozza con la gestione dell'evento postback.

Se non ho codice alla mano non posso dirti più di tanto.


>Grazie per l'aiuto.

Prego

Riccardo D'Aria
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5