Continuo refresh di una gridview

mercoledì 24 ottobre 2012 - 14.17
Tag Elenco Tags  VB.NET  |  .NET 3.5  |  .NET 4.0  |  Windows Server 2008 R2  |  Visual Studio 2010

trinity Profilo | Guru

Salve ragazzi,
posto il codice asp, in pratica ho una pagina aspx con un'update panel globale ed all'interno due gridview...Quella che gestisce le presenze ossia la gw_in_albergo, gli ho creato una routine che mi eseguo un controllo, posto anche quella, ogni volta che clicco su una checkbox, la scrollbar della gridview mi ritorna all'inzio creando delle difficoltà in quanto le lista sono lunghe e vorrei che la visualizzazione della grid rimanesse dove è stata cliccata la chceckbox. Spero di essere stato chiaro.

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Help me
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

andrestu Profilo | Expert

te la butto lì senza darti indicazioni precise:

gridview all'interno in un div impostato con un altezza fissa e overflow scroll, un hiddenfield che serve per memorizzare il valore della barra, uno script jquery da far girare ad ogni refresh che reimposta la barra in base al valore dell'hiddenfield e un altro script che memorizza nell' hiddenfield ad ogni spostamento della barra il suo valore (più che ad ogni spostamento forse è meglio quando perde il focus esisterà sicuramente l'evento).
questa potrebbe essere una soluzione ma sicuramente potrebbe esistere qualcosa di meno incasinato...

mi sta venendo un dubbio per evitare sto casino, non è che i controlli panel di aspnet memorizzano in qualche modo la posizione della barra ???

trinity Profilo | Guru

Il problema sta qui:

<ItemTemplate>
<asp:CheckBox ID="chk_Seleziona_Schedina"
runat="server" AutoPostBack="True" OnCheckedChanged="chk_Seleziona_Schedina_OnCheckedChanged"/>
</ItemTemplate>

che c'è Auotpostbakc = true solo che se imposto =False non mi esegue più questo contorllo:

Ho trovato in rete queste codice che funziona:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

ma non so come applicarlo al mio cidce postato nel primo post.....

ho scritto così nel mio codice aps ma non funziona:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

andrestu Profilo | Expert

Allora prima cosa devi verificare che il tutto funziona senza update panel, ovviamente devi aggiungere la funzione che imposta lo scroll (setscroll) nell'evento client onload del body oppure visto che sicuramente avrai uno script manager nella pagina puoi aggiungerla così:

<script type="text/javascript">
function pageLoad() {
funzione che imposta lo scroll...
}
</script>

a questo punto se il tutto funziona aggiungi l'update panekl e aggiungi anche questo script:

<script type="text/javascript">

var app = Sys.Application;
app.add_init(ApplicationInit);

function ApplicationInit(sender) {
var prm = Sys.WebForms.PageRequestManager.getInstance();
if (!prm.get_isInAsyncPostBack()) {
prm.add_pageLoaded(PageLoaded);
}

function PageLoaded(sender, args) {
funzione che imposta lo scroll...
}
</script>

ovviamente assicurati che anche i controlli hiddenfield siano all'interno dell'update panel, se la cosa non funziona sin dal primo test allora fai un pò di debug e assicurati che gli hiddenfield siano valorizzati correttamente

trinity Profilo | Guru

intendi così:

><script type="text/javascript">
> function pageLoad() {
function setScroll(PanelID, HiddenFieldID1, HiddenFieldID2) {
if (document.getElementById(PanelID) != null
&& document.getElementById(HiddenFieldID1) != null
&& document.getElementById(HiddenFieldID2) != null) {
document.getElementById(PanelID).scrollLeft = document.getElementById(HiddenFieldID1).value;
document.getElementById(PanelID).scrollTop = document.getElementById(HiddenFieldID2).value;
}
}

>}
></script>
>
>a questo punto se il tutto funziona aggiungi l'update panekl
>e aggiungi anche questo script:
>
><script type="text/javascript">
>
> var app = Sys.Application;
> app.add_init(ApplicationInit);
>
> function ApplicationInit(sender) {
> var prm = Sys.WebForms.PageRequestManager.getInstance();
> if (!prm.get_isInAsyncPostBack()) {
> prm.add_pageLoaded(PageLoaded);
> }
>
> function PageLoaded(sender, args) {
function setScroll(PanelID, HiddenFieldID1, HiddenFieldID2) {
if (document.getElementById(PanelID) != null
&& document.getElementById(HiddenFieldID1) != null
&& document.getElementById(HiddenFieldID2) != null) {
document.getElementById(PanelID).scrollLeft = document.getElementById(HiddenFieldID1).value;
document.getElementById(PanelID).scrollTop = document.getElementById(HiddenFieldID2).value;
}
}

> }
></script>


oppure

><script type="text/javascript">
> function pageLoad() {
function setScroll(PanelID, HiddenFieldID1, HiddenFieldID2) {
if (document.getElementById(PanelID) != null
&& document.getElementById(HiddenFieldID1) != null
&& document.getElementById(HiddenFieldID2) != null) {
document.getElementById(PanelID).scrollLeft = document.getElementById(HiddenFieldID1).value;
document.getElementById(PanelID).scrollTop = document.getElementById(HiddenFieldID2).value;
}
}
function getScroll(PanelID, HiddenFieldID1, HiddenFieldID2) {
if (document.getElementById(PanelID) != null
&& document.getElementById(HiddenFieldID1) != null
&& document.getElementById(HiddenFieldID2) != null) {
document.getElementById(HiddenFieldID1).value = document.getElementById(PanelID).scrollLeft;
document.getElementById(HiddenFieldID2).value = document.getElementById(PanelID).scrollTop;
}
}
setScroll('<%= Panel1.ClientID %>', '<%= HF_scroll_Hor.ClientID %>', '<%= HF_scroll_Ver.ClientID %>');

>}
></script>
>
>a questo punto se il tutto funziona aggiungi l'update panekl
>e aggiungi anche questo script:
>
><script type="text/javascript">
>
> var app = Sys.Application;
> app.add_init(ApplicationInit);
>
> function ApplicationInit(sender) {
> var prm = Sys.WebForms.PageRequestManager.getInstance();
> if (!prm.get_isInAsyncPostBack()) {
> prm.add_pageLoaded(PageLoaded);
> }
>
> function PageLoaded(sender, args) {
function setScroll(PanelID, HiddenFieldID1, HiddenFieldID2) {
if (document.getElementById(PanelID) != null
&& document.getElementById(HiddenFieldID1) != null
&& document.getElementById(HiddenFieldID2) != null) {
document.getElementById(PanelID).scrollLeft = document.getElementById(HiddenFieldID1).value;
document.getElementById(PanelID).scrollTop = document.getElementById(HiddenFieldID2).value;
}
}
function getScroll(PanelID, HiddenFieldID1, HiddenFieldID2) {
if (document.getElementById(PanelID) != null
&& document.getElementById(HiddenFieldID1) != null
&& document.getElementById(HiddenFieldID2) != null) {
document.getElementById(HiddenFieldID1).value = document.getElementById(PanelID).scrollLeft;
document.getElementById(HiddenFieldID2).value = document.getElementById(PanelID).scrollTop;
}
}
setScroll('<%= Panel1.ClientID %>', '<%= HF_scroll_Hor.ClientID %>', '<%= HF_scroll_Ver.ClientID %>');

> }
></script>


cmq in un progetto vuoto con anche lo script manager e l'update panel funziona, il codice che avevo postato funziona, l'unica cosa che non utilizzo un gridview ed è quello che devo provare
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

trinity Profilo | Guru

Ciao allora ho fatto così:

function pageLoad() {
function setScroll(PanelID, HiddenFieldID1, HiddenFieldID2) {
if (document.getElementById(PanelID) != null
&& document.getElementById(HiddenFieldID1) != null
&& document.getElementById(HiddenFieldID2) != null) {
document.getElementById(PanelID).scrollLeft = document.getElementById(HiddenFieldID1).value;
document.getElementById(PanelID).scrollTop = document.getElementById(HiddenFieldID2).value;
}
}
}

function getScroll(PanelID, HiddenFieldID1, HiddenFieldID2) {
if (document.getElementById(PanelID) != null
&& document.getElementById(HiddenFieldID1) != null
&& document.getElementById(HiddenFieldID2) != null) {
document.getElementById(HiddenFieldID1).value = document.getElementById(PanelID).scrollLeft;
document.getElementById(HiddenFieldID2).value = document.getElementById(PanelID).scrollTop;
}
}
setScroll('pan_Presenti', 'HF_scroll_Hor', 'HF_scroll_Ver');

e quando avvio la pagina sulla riga: setScroll('pan_Presenti', 'HF_scroll_Hor', 'HF_scroll_Ver'); mi dice questo errore: Errore di run-time di Microsoft JScript: Il valore della proprietà 'setScroll' è nullo o non definito, non è un oggetto funzione
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

andrestu Profilo | Expert

aspe ti faccio una pagina di esempio, dammi un minuto

Andrea Restucci - Web Developer

andrestu Profilo | Expert

ok ci sono, allora questo è il codice dell'intero form, ovviamente è solo un esempio devi apportare delle modifiche in base al tuo contenuto

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

ti torna? ci capisci? ovviamente nel caso della checkbox che fa il postback devi associare la funzione getScroll prima che faccia il postback quindi probabilmente ci sarà o un evento dedicato lato client oppure basta onclick


Andrea Restucci - Web Developer

trinity Profilo | Guru

Provo e ti faccio sapere, per ora grazie mille
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5