ProgrammaSubito.it
appunti su ASP.NET 2.0, C#
a cura di Carmine Pacifico
My Facebook

Sostieni ProgrammaSubito.it

Mantere la posizione dello scroll di un panel fra Postback

Maintaining scroll position of Panel on Postback

In questo esempio viene mostrato come mantenere la posizione degli scrolls di un Panel Control fra Postback.


>>

File Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" MaintainScrollPositionOnPostback="true" %>

<!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>ProgrammaSubito.it</title>

</head>
<body>

<form id="form1" runat="server">
<div>

  <asp:Panel ID="Panel1"
             runat="server"
             Height="100px"
             ScrollBars="Both"
             BorderWidth="1"
             Width="200px">
             <div style="width:250px"> 
                Nel mezzo del cammin di nostra vita
               mi ritrovai per una selva oscura
               ché la diritta via era smarrita.
               Ahi quanto a dir qual era è cosa dura
               esta selva selvaggia e aspra e forte
               che nel pensier rinova la paura!
             </div>
  </asp:Panel>
  <br /><br />
  <asp:Button ID="Button1" runat="server" Text="Do PostBack" />

  <!-- Definisco due hidden field dove memorizzerò rispettivamente 
    -- il valore dello sroll Orizzontale e Verticale --> 
  <asp:HiddenField ID="HF_scroll_Hor" runat="server" />
  <asp:HiddenField ID="HF_scroll_Ver" runat="server" />

  <!-- Definissco 2 funzioni javascript
    -- getScroll(PanelID, HiddenFieldID1, HiddenFieldID2)
    -- che sarà richiamata ogni volta che cabierà lo scroll
    -- del Panel e memorizzerà negli hidden filed il valore
    -- dello sscroll e
    -- setScroll(PanelID, HiddenFieldID1, HiddenFieldID2)
    -- che sarà richiamata al caricamento della pagina
    -- e reimposterà il valore dello scroll recuperandolo
    -- dagli hidden field --> 
  <script type="text/javascript">
  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>

</div>
</form>

</body>

</html>



File Default.aspx.cs

public partial class _Default : System.Web.UI.Page
{
   protected void Page_Load(object sender, EventArgs e)
   {
      Panel1.Attributes.Add("onscroll", "getScroll('" + Panel1.ClientID + "','" + HF_scroll_Hor.ClientID + "','" + HF_scroll_Ver.ClientID + "')");      
   }
}