ho una pagina server asp.net di esempio. Anche se usi un sistema diverso, forse puoi trovare uno spunto.
Il principio è questo:
dentro il form si mettono due hidden che sono valorizzati con la posizione della pagina.
Quando viene fatta l'aggiornamento della pagina, nell'evento load, viene ristabilita la posizione x e y originali.
Il codice è questo: ho messo commenti affinchè sia comprensibile pure a chi non usa asp.net, comunque siamo qui:
codice:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="scroll_griglia_senza_webcontrol.aspx.vb" Inherits="CorsoApogeo_wrox_comandi_ed_associazione_di_dati_datagrid_scroll_griglia_senza_webcontrol" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Pagina senza titolo</title>
<link href="../../../../stili/Styles.css" rel="stylesheet" type="text/css" />
<script id="clientEventHandlersJS" type="text/javascript" >
<!--
function window_onload()
{
if(self.RestoreScrollPosition) RestoreScrollPosition();
if(self.SaveScrollPositions) SaveScrollPositions();
}
function RestoreScrollPosition()
{
scrollTo(document.forms[0].StaticPostBackScrollHorizontalPosition.value, document.forms[0].StaticPostBackScrollVerticalPosition.value);
}
function SaveScrollPositions()
{
document.forms[0].StaticPostBackScrollVerticalPosition.value = GetScrollY();
document.forms[0].StaticPostBackScrollHorizontalPosition.value = GetScrollX();
setTimeout('SaveScrollPositions()', 10);
}
function GetScrollY()
{
if (document.documentElement && document.documentElement.scrollTop)
return document.documentElement.scrollTop;
else if (document.body)
return document.body.scrollTop
else
{
return window.pageYOffset;
}
}
function GetScrollX()
{
if (document.documentElement && document.documentElement.scrollLeft)
return document.documentElement.scrollLeft;
else if (document.body)
return document.body.scrollLeft
else
{
return window.pageXOffset;
}
}
//-->
</script>
</head>
<body onload="return window_onload()">
<h3>Scroll di una griglia</h3>
<form id="Form1" method="post" runat="server">
<%-- questi due hidden conservano la posizione di scroll
e vanno valorizzati nel server
--%>
<input type="hidden" id="StaticPostBackScrollVerticalPosition" value="0" runat="server" />
<input type="hidden" id="StaticPostBackScrollHorizontalPosition" value="0" runat="server" />
<%-- questa è una semplice tabella con molte righe --%>
<asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False" EnableViewState="true" Width="1500px">
<Columns>
<asp:ButtonColumn ButtonType="PushButton" HeaderText="submit" Text="SUBMIT"></asp:ButtonColumn>
<asp:BoundColumn DataField="id" HeaderText="ID"></asp:BoundColumn>
<asp:BoundColumn DataField="nome_comune" HeaderText="COMUNE"></asp:BoundColumn>
<asp:EditCommandColumn EditText="Modifica" HeaderText="Operazioni" UpdateText="Aggiorna" CancelText="Annulla"></asp:EditCommandColumn>
</Columns>
</asp:DataGrid>
</form>
</body>
</html>