Foros del Web » Programando para Internet » ASP Clásico »

Problema paginacion resultados

Estas en el tema de Problema paginacion resultados en el foro de ASP Clásico en Foros del Web. Wenas maestros, Tengo en mi web una pagina asp que se encarga de hacer la paginación de resultados que funciona perfectamente, pero es que no ...
  #1 (permalink)  
Antiguo 11/04/2006, 07:29
Avatar de gorka_arai  
Fecha de Ingreso: octubre-2005
Mensajes: 281
Antigüedad: 18 años, 7 meses
Puntos: 1
Problema paginacion resultados

Wenas maestros,
Tengo en mi web una pagina asp que se encarga de hacer la paginación de resultados que funciona perfectamente, pero es que no logro encontrar la manera de que si los resultados ocupan 20 paginas y modifico la 17, volver a esa página que acabo de modificar y no a la 1. Más que nada porque cara al usuario es una putada que por cada cambio que haga en la página 17 (o la que sea) le lleve de vuelta a la 1....

Sé que el código es largo, por eso veréis que lo he reducido al máximo para no aburriros demasiado. Desde ya GRACIAS

Código:
<%
'Le decimos al navegador que no guarde la página en la caché
Response.addHeader "pragma", "no-cache"
'de esta forma si hay un proxy de por medio la página no se almacenará en su caché por ser "Private"
'si fuese "Public" ésta sí que se almacenaría en la caché del proxy
Response.CacheControl = "Private"
'Indica que la página caduca, por lo que inutilizamos la caché del navegador obligando así al cliente
'a descargarla siempre del servidor
Response.Expires = 0
%> 
<HTML>
<HEAD>
</HEAD>
<BODY>
<%
Dim mostrar 'cantidad de registros a mostrar por página
Dim cant_paginas 'cantidad de páginas que recibimos
Dim pagina_actual 'La página que mostramos
Dim registro_mostrado 'Contador utilizado para mostrar las páginas
Dim I 'Variable Loop
dim strsql 'Consulta sql

mostrar = 20 ' Pueden modificar este número para cambiar la cantidad de registros por página

' IF para saber que página mostrar
If Request.QueryString("page") = "" Then
pagina_actual = 1
Else
pagina_actual = CInt(Request.QueryString("page"))
End If
'Conexión con la BD
dim conex,reg,sql,usuario 
set conex=server.CreateObject("ADODB.Connection")
set reg=server.CreateObject("ADODB.Recordset")
conex.ConnectionString="provider=microsoft.jet.oledb.4.0; data source=" & server.MapPath("Db\GESTIÓN PROVEEDORES.mdb")
conex.Open 
usuario=session("id_usu")
sql="select * from [Lín_ compra] where [Nº documento]='" & session("cod_pedido") & "'"
reg.Open sql,conex,3,2
' Creamos el RecordSet y definimos la cantidad de registros a mostrar
reg.PageSize = mostrar
reg.CacheSize = mostrar
'contamos las páginas que se formaron con la variable mostrar.
cant_paginas = reg.PageCount
' Si el pedido de página cae fuera del rango,
' lo modificamos para que caiga dentro
If pagina_actual > cant_paginas Then pagina_actual = cant_paginas
If pagina_actual < 1 Then pagina_actual = 1

' Si la cantidad de páginas da 0 es que no hay registros... por eso este IF
If cant_paginas = 0 Then%>
	<strong><%Response.Write(session("usu"))%><FONT face=Arial>&nbsp;</FONT></strong>
	<%Response.Write("NO HAY LINEAS PARA ESTE PEDIDO")%>
<%Else
' Nos movemos a la página elegida
reg.AbsolutePage = pagina_actual
' Mostramos el dato de que página estamos...
%>
<FONT face=Arial><FONT>
<FONT SIZE="+1"><b><%Response.Write(session("usu"))%></b></FONT>
<FONT face=Arial><FONT>
<FONT SIZE="+1">Página <B><%= pagina_actual %></B> de <B><%= cant_paginas %></B></FONT>
<%
' Espacios
Response.Write "<BR><BR>" & vbCrLf
'iniciamos la tabla donde mostraremos todo%>
<a href="Ayuda_fecha_recepcion.asp" target="_blank">¿Necesita ayuda?</a>
<%Response.Write "<TABLE BORDER=""1"" width=""300"" bordercolor=""black"">" & vbCrLf%>
<tr bgcolor=red>
				<th colspan=20><FONT face=Arial size=2><STRONG><FONT color=ivory>LINEAS DEL PEDIDO <%Response.Write(session("cod_pedido"))%></STRONG></FONT></FONT></th>
			</tr><br>
<%' Mostramos los titulos de las columnas... 
Response.Write vbTab & "<TR>" & vbCrLf
Response.Write "<TD><B><FONT face=Arial size=2 color=mediumblue>Nº PRODUCTO</td></font>"
.
.
bla bla bla
.
.
</FORM></td></font>"


Response.Write vbTab & "</TR>" & vbCrLf

' Hacemos el bucle mostrando los datos del registro
registro_mostrado = 0
Do While registro_mostrado < mostrar And Not reg.EOF
	Response.Write vbTab & "<TR>" & vbCrLf
	.
        .
        bla bla
        .
        .
	Response.Write "<FORM METHOD=""POST"" ACTION=""Paginar_lineas_pedidos.asp"" ID=""form01"" NAME=""form01""><INPUT NAME=""Nueva_fecha_entrega"" onKeypress=""if(event.keyCode<47 || event.keyCode>57)event.returnValue=false;"" onKeyUp =""this.value=formateafecha(this.value);"" VALUE='" & reg.Fields("Fecha recepción") & "'><input type=""submit"" value='" & reg.Fields("Nº") & "' name=""cmd_guardar"">"
	Response.Write "</TD>" & vbCrLf
	Response.Write vbTab & vbTab & "<TD>"
	'Este es un campo oculto en el que cargamos en nº de linea de un pedido con la finalidad de que si en un pedido hay 
	'dos lineas del mismo producto con cantidad a recibir diferentes asi las distinguimos (por el numero de linea) y 
	'asignamos valores a la correcta. Vease caso sagitron pc-13250 prod 5424013
	Response.Write "<INPUT TYPE=""hidden"" NAME=""Numero_linea_pedido"" value='" & reg.Fields("Nº línea") & "'></FORM>"
	Response.Write "</TD>" & vbCrLf
	Response.Write vbTab & "</TR>" & vbCrLf
	

	' Sumamos 1 a los mostrados
	registro_mostrado = registro_mostrado + 1
	' Nos movemos al próximo registro...
	reg.MoveNext
Loop

'listo...
Response.Write "</TABLE>" & vbCrLf
End If

' Cerramos y limpiamos...
reg.Close
Set reg = Nothing
conex.Close
Set conex = Nothing

' Ahora mostramos los enlaces a las otras páginas con el resto de los registros...
If pagina_actual > 1 Then
%>
</FONT></FONT>
<A href="Paginar_lineas_pedidos.asp?eje=30&amp;page=<%= pagina_actual - 1 %>" ><FONT 
face=Arial>[&lt;&lt; Anterior]</FONT> </a>
<%
End If

' mostramos la paginacion por numeros de página
For I = 1 To cant_paginas
If I = pagina_actual Then
%>
<%= I %>
<%
Else
%>
<FONT face=Arial> </FONT>
<A href="Paginar_lineas_pedidos.asp?eje=30&amp;page=<%= I %>" ><%= I %></a>
<%
End If
Next 'I
If pagina_actual < cant_paginas Then
%>
<A href="Paginar_lineas_pedidos.asp?eje=30&amp;page=<%= pagina_actual + 1 %>" ><FONT 
face=Arial>[Próximo &gt;&gt;]</FONT ></a>
<%
End If
'Fin...
%>
<form action="Paginar_lineas_pedidos.asp" method="post" name="form332" id="form332">
	<p><input type="submit" value="VOLVER" name="cmd_volver"></p>
</form>
<%
	if Request.Form("cmd_volver")="VOLVER" then
		Response.Redirect("Pedidos_pendientes.asp")
	end if
	if Request.Form("cmd_confirmar_todo")="Confirmar todo" then
		Response.Redirect("Guardar_todas_lineas.asp")
	end if
	if Request.Form("cmd_guardar")<>"" then
		session("cod_seleccionado")=Request.Form("cmd_guardar").Item
		session("guardar_fecha_recepcion")=Request.Form("Nueva_fecha_entrega").Item
		session("num_lin_pedido")=Request.Form("Numero_linea_pedido").Item
		Response.Redirect("Guardar_fecha_recepcion.asp")
	end if
	session("pag_actual")=pagina_actual
%>
</BODY>
</HTML>
  #2 (permalink)  
Antiguo 11/04/2006, 08:24
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
No se si te entendi muy bien, pero lo que yo haria seria enviar el numero de pagina dentro del form que graba como un input de tipo hidden y cambiar la forma en la que rescatas este numero por un simple Request("pagina"), para que puedas enviarlo por querystring y por form.

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 12/04/2006, 01:32
Avatar de gorka_arai  
Fecha de Ingreso: octubre-2005
Mensajes: 281
Antigüedad: 18 años, 7 meses
Puntos: 1
Hola u_goldman!!! Gracias por tu respuesta. Podrías concretarme un poquillo más (en mi código si fuese posible) qué tengo que variar para hacer lo que dices?
La idea la entiendo, pero no logro llevarla a la práctica...
  #4 (permalink)  
Antiguo 12/04/2006, 08:19
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Trata esto, basicamente nada mas es mandar el valor de la pagina actual a si misma cuando haces el submit a la forma, asi siempre tendras este valor, si necesitas redirigir, pues considera utilizar esta variable tambien en tu redireccion:


Código:
' IF para saber que página mostrar
If Request("page") = "" Then
  pagina_actual = 1
Else
  pagina_actual = CInt(Request.QueryString("page"))
End If
.
.
.
<form action="Paginar_lineas_pedidos.asp" method="post" name="form332" id="form332">
       <input type="hidden" name="page" value="<%=pagina_actual%>" />
	<p><input type="submit" value="VOLVER" name="cmd_volver"></p>
</form>

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #5 (permalink)  
Antiguo 19/04/2006, 05:08
Avatar de gorka_arai  
Fecha de Ingreso: octubre-2005
Mensajes: 281
Antigüedad: 18 años, 7 meses
Puntos: 1
Kaixo u_goldman!!!

Tu solución ha funcionado PERFECTAMENTE!!! Muchísimas gracias por tu impagable ayuda. GRACIAAAAS!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:36.