Mantenere la posizione

venerdì 05 maggio 2006 - 11.15

secks Profilo | Senior Member

Come posso mantenere la posizione della pagina quando le informazioni sono più lunghe della stessa?
Ad esempio ho una datagrid che per scelta non è divisa per pagine. Perciò avendo 50 righe il contenuto va oltre la videata.
Se modifico la 40 esima riga la pagina torna all'inizio.
E' possibile che dopo il postback mi posso riposizionare in modo da vedere la 40 esima riga?

Spero di essermi spiegato in qualche modo.

Ciao a tutti.
Paolo.

alx_81 Profilo | Guru

l'unica che mi viene in mente è generare un ancora per ogni riga..
all'evento itemdatabound creare un <a name="x"> in una cella, dove x è l'id della riga ad esempio..

poi dopo l'edit, fare la redirect verso la stessa pagina, aggiungendo il #x per andare in quel punto..
è molto ridondante.. di roundtrip a server ne fa sempre uno in più.. e quindi se la query è pesante.. non è bello,,
è l'unica che mi viene..

Alx81 =)

http://blogs.dotnethell.it/suxstellino

alx_81 Profilo | Guru

aknowledge =)
la mia soluzione era orribile =)

Alx81 =)

http://blogs.dotnethell.it/suxstellino

secks Profilo | Senior Member

Ho una DataGrid su WebForm in VB.NET alimentata da una tabella con un numero di elementi che a volte superano il numero delle righe visibili. Sulla dataGrid è impostato un pulsante per modificare alcune colonne a livello di riga. Se sono ad esempio posizionato sull'ultima riga e clicco sul pulsante di modifica al PostBack mi va all'inizio della pagina.
Al click sul pulsante di modifica vengono eseguite le seguenti istruzione ...

DataGrid1.EditItemIndex = e.Item.ItemIndex

DataGrid1.DataSource = _dasVar.Tables(TABTMPCOS)
DataGrid1.DataKeyField = "CosID"

Dim sortExpr As String = DataGrid1.Attributes("SortExpr")

If Not (sortExpr Is Nothing) AndAlso sortExpr.ToString.Length > 0 Then
Dim dv As DataView = _dasVar.Tables(TABTMPCOS).DefaultView
dv.Sort = sortExpr.ToString
DataGrid1.DataSource = dv
End If

DataGrid1.DataBind()

If DataGrid1.EditItemIndex >= 0 Then

Dim dgi As DataGridItem = DataGrid1.Items(DataGrid1.EditItemIndex)

Dim y As DataRow = GetDataRowCos(DataGrid1.DataKeys(DataGrid1.EditItemIndex).ToString)

Dim txtCosLis As TextBox = DirectCast(dgi.FindControl("txtCosLis"), TextBox)
txtCosLis.Text = y("cos_lis")

End If

... che mi permettono di modificare i dati.

E' da un po' di tempo che cerco di risolvere il problema. Ho provato ad impostre sulla datagrid SmartNavigation=True.
Ma non ho visto alcuna differenza.
Ho visto che ci sono varie risposte nel forum al mio problema, ma non ho capito quale puo' fare al mio caso.
Non riesco a capire come impostare un anchor in vb.net

Come posso fare?

Grazie e ciao a tutti.
Paolo.
Grazie a tutti.
Paolo.

secks Profilo | Senior Member

Ho una DataGrid su WebForm in VB.NET alimentata da una tabella con un numero di elementi che a volte superano il numero delle righe visibili. Sulla dataGrid è impostato un pulsante per modificare alcune colonne a livello di riga. Se sono ad esempio posizionato sull'ultima riga e clicco sul pulsante di modifica al PostBack mi va all'inizio della pagina.
Al click sul pulsante di modifica vengono eseguite le seguenti istruzione ...

DataGrid1.EditItemIndex = e.Item.ItemIndex

DataGrid1.DataSource = _dasVar.Tables(TABTMPCOS)
DataGrid1.DataKeyField = "CosID"

Dim sortExpr As String = DataGrid1.Attributes("SortExpr")

If Not (sortExpr Is Nothing) AndAlso sortExpr.ToString.Length > 0 Then
Dim dv As DataView = _dasVar.Tables(TABTMPCOS).DefaultView
dv.Sort = sortExpr.ToString
DataGrid1.DataSource = dv
End If

DataGrid1.DataBind()

If DataGrid1.EditItemIndex >= 0 Then

Dim dgi As DataGridItem = DataGrid1.Items(DataGrid1.EditItemIndex)

Dim y As DataRow = GetDataRowCos(DataGrid1.DataKeys(DataGrid1.EditItemIndex).ToString)

Dim txtCosLis As TextBox = DirectCast(dgi.FindControl("txtCosLis"), TextBox)
txtCosLis.Text = y("cos_lis")

End If

... che mi permettono di modificare i dati.

E' da un po' di tempo che cerco di risolvere il problema. Ho provato ad impostre sulla datagrid SmartNavigation=True.
Ma non ho visto alcuna differenza.
Ho visto che ci sono varie risposte nel forum al mio problema, ma non ho capito quale puo' fare al mio caso.
Non riesco a capire come impostare un anchor in vb.net

Come posso fare?

Grazie e ciao a tutti.
Paolo.

fedecheller Profilo | Junior Member

Puoi farlo via javascript: mettendo tutto in un div di dimensione fissa con scrollbar (della grandezza della tua pagina) e in una textbox nascosta prima del post assegni la sua posizione attuale di scroll (credo offsetTop) e quando ricarichi a fondo pagina usi il metodo
.scrollTo(x,y) per il div
MUSIC IS FREE, DRINK ARE TO PAY, STAY TILL LATE BUT SLEEP AWAY

secks Profilo | Senior Member

Ti ringrazio per la risposta.
Però sono in difficoltà per come utilizzare i tuoi comandi in JavaScript con Vb.NET su WebForm.
Mi puoi o potete dare una dritta?

Ciao e grazie.
Paolo.

fedecheller Profilo | Junior Member

nel post precedente ce allegato un esempio del codice javascript.
prova a guardarlo e fammi sapere
MUSIC IS FREE, DRINK ARE TO PAY, STAY TILL LATE BUT SLEEP AWAY

secks Profilo | Senior Member

Ho aperto il file esempio.htm con visual strudio 2003.
Mi si è aperta una finestra con i 2 pulsanti dell'esempio.
Vado a vedere il codice HTML e tra gli altri ci sono i seguenti comandi:

var aa = 0;
function controllo()
{
aa = document.all('x').scrollTop;
}
function go()
{
document.all('x').scrollTop = aa;
}
</script>
</head>
<body>
<input type=button onclick="controllo()" value="SETTA POSIZIONE">
<input type=button onclick="go()" value="VAI A POSIZIONE">
<div style="overflow: scroll;overflow-x:scroll;width:99%;height:95%;" id="x">

Il mio problema è che non so' applicare al mio progetto in vb.net su WebForm le seguenti istruzioni:
aa = document.all('x').scrollTop;
document.all('x').scrollTop = aa;

in quanto non viene riconosciuto "Document"

Ciao e grazie.
Paolo.

fedecheller Profilo | Junior Member

il fatto che sia una pagina .aspx non importa, stiamo parlando di codice javascript lato client quindi non nel file .vb.

I passi sono i seguenti:
- nel onsubmit della form aggiungi un metodo per valorizzare la posizione di scroll del tuo DIV in cui è contenuto il datagrid (in realtà e renderizzato come una normale tabella), ovvero prendi il valore di scroll del div e lo metti in una textbox nascosta.

- nella pagina metti un controllo textbox e lo valorizzi di default a zero

- a fondo pagina metti questo codice:
<script>
document.getElementById('mioDiv').scrollTo(0,document.getElementById('miaTextbox').value);
</script>

cosa non ti torna????

MUSIC IS FREE, DRINK ARE TO PAY, STAY TILL LATE BUT SLEEP AWAY

secks Profilo | Senior Member

Il mio problema è che non ho mai inserito codice a mano nella parte HTML della form, purtroppo.
Comunque, all'inizio ho inserito le due funzioni controllo e go:

<HTML>
<HEAD>
<title>frmVarCosti</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<script>
var aa = 0;
function controllo()
{
aa = document.all('x').scrollTop;
}
function go()
{
document.all('x').scrollTop = aa;
}
</script>
</HEAD>

poi ho inserito i 2 pulsanti e sul OnClick ho impostato le funzioni relative:

<asp:Button id="Button1" style="Z-INDEX: 114; LEFT: 896px; POSITION: absolute; TOP: 80px" runat="server"
Width="32px" Height="16px" Text="Button" OnClick="controllo()"></asp:Button>
<asp:Button id="Button2" style="Z-INDEX: 115; LEFT: 896px; POSITION: absolute; TOP: 120px" runat="server"
Width="40px" Height="16px" Text="Button" OnClick="go()"></asp:Button></FORM>
</body>
</HTML>


ma quando lancio il programma mi da il seguente errore:


Messaggio di errore del compilatore: BC30456: 'controllo' non è un membro di 'ASP.frmVarCosti_aspx'.

Grazie.

fedecheller Profilo | Junior Member

in questo nuovo esempio fa tutto quello che ti serve.
va in post e si riposiziona nel punto dove eri.
Guarda bene il codice, lato server non devi fare niente: fa tutto nella pagina .aspx.
Di + non so come spiegartelo.

MUSIC IS FREE, DRINK ARE TO PAY, STAY TILL LATE BUT SLEEP AWAY

secks Profilo | Senior Member

Appena ho un po' di tempo mi guardo bene l'esempio e mi documento su questo tipo di programmazione.

Grazie ancora.
Ciao.
Paolo.
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5