Spesso ci si trova di fronte al problema di dover gestire la visualizzazione dei dati in funzione di una specifica risoluzione dello schermo (800x600, 1024x768), sacrificando la resa delle pagine nel caso di risoluzioni superiori o inferiori. Come fare allora a modificare il comportamento di un Web Control al fine di ottenere una corretta visualizzazione dei contenuti per le diverse risoluzioni dello schermo?
Ad esempio, potrebbe essere utile modificare il numero di record presentati in ogni pagina di una DataGrid, in modo tale che l'utente non sia costretto ad utilizzare la barra di scroll per vedere tutto il contenuto. Vediamo come fare.
L'informazione relativa alla risoluzione è un dato ricavabile unicamente tramite codice client (JavaScript), utilizzando le due proprietà dell'oggetto screen: window.screen.width indica la larghezza in pixel dello schermo, window.screen.height indica l'altezza. Il trucco consiste nel passare queste informazioni dal client al server nell'ambito della richiesta della pagina, in maniera che possano essere acquisite e trattate nel codice eseguito sul server. Per fare questo un sistema possibile consiste nell'utilizzare un campo hidden nell'ambito del form HTML.
Nell'esempio di seguito, in page1.aspx viene inserita nel campo hidden l'altezza dello schermo durante il caricamento. Una volta cliccato il pulsante, il dato che prima era disponibile solo in ambito client viene trasferito sul server. In page2.aspx la DataGrid viene pertanto visualizzata con 2, 3 oppure 4 righe per pagina in base alla risoluzione dello schermo.
Pagina page1.aspx
<script language="VB" runat="server"> Sub myButton_Click(sender As Object, e As EventArgs) Response.Redirect("page2.aspx?height=" & Request.Form("screenHeight")) End Sub </script> <body onLoad="document.myForm.screenHeight.value = window.screen.height;"> <form id="myForm" name="myForm" runat="server"> <input type="hidden" name="screenHeight" /> <asp:button id="myButton" runat="server" onClick="myButton_Click" text="Clicca qui!" /> </form> </body>
Pagina page2.aspx
<script language="VB" runat="server"> Sub Page_Load(sender As Object, e As EventArgs) If Not Me.IsPostBack Then myDataGrid.PageSize = 3 If IsNumeric(Request.QueryString("height")) Then If CInt(Request.QueryString("height")) < 768 Then myDataGrid.PageSize = 2 End If If CInt(Request.QueryString("height")) > 864 Then myDataGrid.PageSize = 4 End If End If End If End Sub </script> <body> <form id="myForm" runat="server"> <asp:datagrid id="myDataGrid" runat="server" allowPaging="true" onPageIndexChanged="..." /> </form> </body>
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- C# 4
- Spaziatura tra i caratteri in Silverlight 5
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Segui in tempo reale il TechEd 2004
- da oggi è possibile fare login velocemente con LinkedIn e Google. a questi si aggiunge il supporto già attivo per Facebook, Twitter, Microsoft Account, Windows Hello e OpenID, per darvi sempre più possibilità di accedere semplicemente alla nostra community! #aspitalia
- Migrare una service connection a workload identity federation in Azure DevOps
- Evitare postback multipli in un UpdatePanel