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

como hariais esto

Estas en el tema de como hariais esto en el foro de ASP Clásico en Foros del Web. tengo una serie de registros que tienen un campo llamado orden, este campo indica un orden por defecto en las consultas sobre ellos, es un ...

  #1 (permalink)  
Antiguo 01/02/2005, 09:18
 
Fecha de Ingreso: enero-2005
Mensajes: 17
Antigüedad: 19 años, 3 meses
Puntos: 0
como hariais esto

tengo una serie de registros que tienen un campo llamado orden, este campo indica un orden por defecto en las consultas sobre ellos, es un numero del uno hacia adelante.

el caso es que se debe poder cambiar el orden entonces necesito listar los registros, sobre esa lista de registros establecer el nuevo orden (moviendolos hacia arriba o abajo por ejemplo) y despues guardar en el campo orden el nuevo orden.

a primera vista habia pensado hacerlo con una lista, como lo haria en visual basic, pero me parece que asi no voy a poder hacerlo.

si necesitais mas datos preguntadme.

alguna idea.

un saludo.
  #2 (permalink)  
Antiguo 01/02/2005, 09:36
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Bueno, pues efectivamente, no podras modificar el orden como lo harías en VB o Delphi por medio de la Lista. Pero se puede tratar de emular con los eventos y manejo del mouse con javascript.
Primero, este tema es más de javascript, ya que el problema es como proporcionarle al usuario una forma para cambiar e orden, ya la grabación es trivial.
Una forma fácil sería colocar los registros de forma independiente en campos de texto (o en una capa c/u), y junto a él un combo con su valor de orden seleccionado a fin de que pueda cambiarse la nueva posición.
Aunque sería más amigable jugar con los eventos, pero te tardarías un poco más. En fin, en una idea.
  #3 (permalink)  
Antiguo 01/02/2005, 09:48
 
Fecha de Ingreso: enero-2005
Mensajes: 17
Antigüedad: 19 años, 3 meses
Puntos: 0
podria valer pero tendre del orden de 100 registros que ordenar asique en el combo tendrian que aparecer 100 valores y tendria que controlar que no ponga el mismo valor en dos combos.
  #4 (permalink)  
Antiguo 01/02/2005, 10:23
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
100 regitros a ordenar "a mano" aún en un entorno RAD sería bastante cansado para el usuario, lo normal es que solo cambiaría unos pocos, y por lo de controlar lo del mismovalor en dos combos, pues depende, ¿realmenete lo necesitas?, si hay dos valores con el mismo valor de ordenación pues esta bien que aparezcan indistintamente uno ariiba del otro, y si no, se tomaría el segundo criterio (orden alfabético o que se yo).

Como te mencioné era solo una idea. Si te pone a dudar el hecho de tener que controlar el que no se repitan dos valores en los combos, imagínate el controlar los moviemintos del mouse, el ir recorriendo posiciones en una lista (y sus respectivos valores de ordenación), etc.; que, aunque me imagino no es muy dificil, si ha de ser muy "talachero".
  #5 (permalink)  
Antiguo 01/02/2005, 10:35
 
Fecha de Ingreso: enero-2005
Mensajes: 17
Antigüedad: 19 años, 3 meses
Puntos: 0
lo normal para mi seria no tener que hacer eso, y en los listados dar a elegir por que campo quiere ordenar, pero se a de poder establecer este orden, de echo es lo primero que se va a hacer, ordenar todos los registros., pero eso orden puede cambiar y tengo que dejar una forma de la que lo puedan cambiar.
  #6 (permalink)  
Antiguo 01/02/2005, 10:49
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
Hace poco necesité hacer lo mismo, pero con muchísimos menos registros... unos 15 que se tratan de las categorías de noticias de un sitio. El dueño del sitio no quería que salgan ordenadas automáticamente por algún criterio -alfabético, de mayor cantidad de noticias/lecturas, etc- sino quería ordenarlos él como quisiera. Como ésto fue antes de irme de vacaciones, le dije que me pase el orden que él quería y yo se los ordené -en un campo 'orden'- manualmente con la promesa de que cuando regresara de vacaciones me pondría a ver cómo resolverlo para que él pueda cambiar el orden cuando quisiera desde el panel de administración... ya regresé de vacaciones y todavía no sólo no lo hice sino que estoy en las mismas que vos: no sé cómo :p
Así que si llegaras a alguna solución, te pediría que la comentes para... copiarme jeje

saludos
__________________
...___...
  #7 (permalink)  
Antiguo 01/02/2005, 10:53
 
Fecha de Ingreso: enero-2005
Mensajes: 17
Antigüedad: 19 años, 3 meses
Puntos: 0
tranquilo que si llego a una solucion viable lo comentare por aqui.

pensando pensando, e pensado incluso en la posibilidad de crear un componente activex con visual basic, no se si sera una solucion viable.
  #8 (permalink)  
Antiguo 01/02/2005, 11:01
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Otra idea no dificil de implementar, a ver que te parece:
Generas dos listas en javascript, una llena y otra vacia. Que el usuario vaya trasladando de la primer lista a la segunda y que se vayan eliminando, al final, recorres la segunda lista y ese sería el nuevo orden secuencial.
  #9 (permalink)  
Antiguo 01/02/2005, 11:09
 
Fecha de Ingreso: enero-2005
Mensajes: 17
Antigüedad: 19 años, 3 meses
Puntos: 0
a ver si te entiendo:
-leo de la base de datos
-meto los registros en un array y creo otro vacio
-los voy pasando al array vacio
-guardo el array vacio, que ahora esta lleno

ahora las preguntas
-tendria que pasar todos los elementos del primer array al segundo
-como lo visualizo por pantalla, con que objeto
-como paso el array que hay que guardar a la pagina asp que actualiza los datos
  #10 (permalink)  
Antiguo 01/02/2005, 11:32
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
No tanto es un array (que supongo sería útil para enviar el orden final, pero ni siquiera indispensable), sino un select:

Código:
<select name="ListaOrigen" size="10" style="width:150" multiple>
                <%
			  set adoRs = Server.CreateObject("adodb.recordset")
			  vSQL = "SELECT * FROM TbOrigen order by Descripcion"
			  adoRs.Open vSQL, Cnn
			  While Not adoRs.EOF%>
                <option value="<%=adoRs("id")%>"><%=adoRs("Descripcion")%></Option>
                <%adoRs.MoveNext
			  Wend
			  adoRs.Close
%>
              </select>
Ahora, por medio de un botón, el elemento o elementos que tenga seleccionados, los trasladas a otra lista vacia. con algo como:
Código:
Elemento = document.forms[0].ListaOrigen.options[document.forms[0].ListaOrigen.selectedIndex].text
      Forma.ListaNueva.options[Forma.ListaNueva.length]=Elemento;
Claro, si selecciona varios, debes de recorrerlos uno a uno.
Para enviar la lista ordenada, puedes hacerlo de varias formas: una de ellas podría ser una cadena con algun separador que tenga el id, la posición secuencial de ese id, sería el nuevo orden.

Solo son ideas.

Saludos
  #11 (permalink)  
Antiguo 01/02/2005, 11:42
 
Fecha de Ingreso: enero-2005
Mensajes: 17
Antigüedad: 19 años, 3 meses
Puntos: 0
esta linea no la entiendo, forma que es, otro formulario

Forma.ListaNueva.options[Forma.ListaNueva.length]=Elemento;

lo que no tengo nada claro es, despues de tener una hipotetica lista ya ordenada como mandarla entera a la pagina que lo actualiza.

un saludo.
  #12 (permalink)  
Antiguo 01/02/2005, 11:57
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
Bueno, siguiendo la idea de Myakire, me puse a buscar algún ejemplo de javascript que haga algo similar y encontré éste http://javascript.internet.com/forms/menu-swapper.html que desactivando la funcionalidad para reordenar funcionaría, al menos para mis necesidades (recordar que no son tantos registros)

Acá dejo el código modificado y el agregado de ASP al final para demostrar los resultados:


Código:
<SCRIPT LANGUAGE="JavaScript">

<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://javascript.internet.com -->

<!-- Begin
sortitems = 0;  // Automatically sort items within lists? (1 or 0)

function move(fbox,tbox) {
for(var i=0; i<fbox.options.length; i++) {
if(fbox.options[i].selected && fbox.options[i].value != "") {
var no = new Option();
no.value = fbox.options[i].value;
no.text = fbox.options[i].text;
tbox.options[tbox.options.length] = no;
fbox.options[i].value = "";
fbox.options[i].text = "";
   }
}
BumpUp(fbox);
if (sortitems) SortD(tbox);
}
function BumpUp(box)  {
for(var i=0; i<box.options.length; i++) {
if(box.options[i].value == "")  {
for(var j=i; j<box.options.length-1; j++)  {
box.options[j].value = box.options[j+1].value;
box.options[j].text = box.options[j+1].text;
}
var ln = i;
break;
   }
}
if(ln < box.options.length)  {
box.options.length -= 1;
BumpUp(box);
   }
}

function SortD(box)  {
var temp_opts = new Array();
var temp = new Object();
for(var i=0; i<box.options.length; i++)  {
temp_opts[i] = box.options[i];
}
for(var x=0; x<temp_opts.length-1; x++)  {
for(var y=(x+1); y<temp_opts.length; y++)  {
if(temp_opts[x].text > temp_opts[y].text)  {
temp = temp_opts[x].text;
temp_opts[x].text = temp_opts[y].text;
temp_opts[y].text = temp;
temp = temp_opts[x].value;
temp_opts[x].value = temp_opts[y].value;
temp_opts[y].value = temp;
      }
   }
}
for(var i=0; i<box.options.length; i++)  {
box.options[i].value = temp_opts[i].value;
box.options[i].text = temp_opts[i].text;
   }
}
// End -->
</script>

<center>
<form ACTION="" METHOD="POST">
<table border="0">
<tr>
<td><select multiple size="5" name="list1">
<option value="ID1">Uno</option>
<option value="ID2">Dos</option>
<option value="ID3">Tres</option>
</select></td>
<td>
<input type="button" value="   >>   " onclick="move(this.form.list1,this.form.list2)" name="B1"><br>
<input type="button" value="   <<   " onclick="move(this.form.list2,this.form.list1)" name="B2">
</td>
<td><select multiple size="5" name="list2">
</select></td>
</tr>
</table>
<p>
  <input type="submit" name="Submit" value="Submit">
</p>
</form>
</center>

<p><center>
<font face="arial, helvetica" size="-2">Free JavaScripts provided<br>
by <a href="http://javascriptsource.com">The JavaScript Source</a></font>
</center><p>

<%
If request.form <> "" Then
	arr_list2 = Split(Request.Form("list2"), ", ")
		For i = 0 To UBound(arr_list2)
			SQL = "UPDATE tabla SET orden = " & i + 1 & " WHERE IDRegistro = '" & arr_list2(i) & "'"
			Response.Write SQL & "<br>"
		Next
End if
%>

Sólo aclarar que, luego de pasarlos de la primer lista hacia la segunda, hay que seleccionar manualmente todos los elementos para que el request.form los tome (lógico, así funcionan los selects multiples )

Bueno, se puede pulir y se pueden buscar otras alternativas si ésta no te convence demaciado, pero en vista que mis registros no son tantos y no implicaría demaiado trabajo para el usuario, creo que a mi me sirve
__________________
...___...

Última edición por AlZuwaga; 01/02/2005 a las 12:02
  #13 (permalink)  
Antiguo 01/02/2005, 12:06
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Cierto, hay que seleccionar al fin de cuentas todos los registros, que aunque se pueden seleccionar de a varios, las las veces siguientes sería bastante latoso.

Bien por ti DZ, al colocar un código, seguro le será de utilidad a sinpat.

Pero como dicho código igual utiliza la linea: tbox.options[tbox.options.length] = no que es similar a la que no entendió, te comento que dicha linea es para agregar (append) una opción a la lista.

Saludos
  #14 (permalink)  
Antiguo 01/02/2005, 12:07
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 4 meses
Puntos: 98
Cita:
Sólo aclarar que, luego de pasarlos de la primer lista hacia la segunda, hay que seleccionar manualmente todos los elementos
Y si llamas a una funcion javascript que cuente los items de la lista y por cada item lo vaya seleccionando?
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #15 (permalink)  
Antiguo 01/02/2005, 12:13
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
U_G, ¿que no deberías estar programando algorítmos genéticos evolutivos con ASP?.
Estos post ya no son reto para vos

Saludos my friend
  #16 (permalink)  
Antiguo 01/02/2005, 12:14
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 4 meses
Puntos: 98
je je, nada de eso mi amigo...me estan matando por aca despiadadamente ja ja ja cada dia es una masacre nueva pero quise pasar por esta mi tierra mortal para no sentirme tan solo
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #17 (permalink)  
Antiguo 01/02/2005, 12:19
 
Fecha de Ingreso: enero-2005
Mensajes: 17
Antigüedad: 19 años, 3 meses
Puntos: 0
muchisimas gracias, voy a intentar modificar ese codigo para intentar hacerlo solo en una lista y moviendo de arriba a abajo que es lo que me interesaria a mi.

gracias por la aclaracion de la linea Myakire
  #18 (permalink)  
Antiguo 01/02/2005, 12:28
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
Je, u_g, es cierto lo de que se seleccione automáticamente. Ocurre que de javascript no tengo mucha idea.

Aunque me resulta más interesante la observacion de sinpat: Intercalar los elementos de una sola lista moviéndolos de arriba a abajo. Sería lo ideal.

Igualmente esa funcioncita, la de seleccionar todos los elementos, va a ser necesaria ya sea que se use una o dos listas.
__________________
...___...
  #19 (permalink)  
Antiguo 01/02/2005, 12:36
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 4 meses
Puntos: 98
No tengo el script a la mano...lo tengo en casa, pero mas o menos seria algo asi? http://webtest.e-webtraders.com/cata.../admin_cat.asp seleccionas de la lista de la izquierda y acomodas en la de en medio, al final solo tienes que seleccionar cada elemento para enviarlo y listo, recoges y procesas...Fijate cuando llenas la lista y seleccionas reordenar departamentos como accion
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway

Última edición por u_goldman; 01/02/2005 a las 12:37
  #20 (permalink)  
Antiguo 01/02/2005, 12:46
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
u_g, cuando selecciono de la lista de la izquierda, en la del medio no pasa nada de nada!
__________________
...___...
  #21 (permalink)  
Antiguo 01/02/2005, 12:47
 
Fecha de Ingreso: enero-2005
Mensajes: 17
Antigüedad: 19 años, 3 meses
Puntos: 0
u_goldman muchas gracias por esa url, espero que no te importe que coga los scripts de mover hacia arriba y hacia abajo y de enviar.
  #22 (permalink)  
Antiguo 01/02/2005, 12:51
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
Ah, sory.. no pas nada con Firefox... con IE si.
Y efectivamente el funcionamiento de la lista central sería el buscado, que permita subir y bajar elementos y que al hacer el submit se seleccionen todos automáticamente
__________________
...___...
  #23 (permalink)  
Antiguo 01/02/2005, 12:53
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 4 meses
Puntos: 98
je je si, es que esta disenyado para Explorer ja ja ja ja!
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #24 (permalink)  
Antiguo 01/02/2005, 12:59
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 4 meses
Puntos: 98
Cita:
u_goldman muchas gracias por esa url, espero que no te importe que coga los scripts de mover hacia arriba y hacia abajo y de enviar.
Alguien en este foro usaba una firma que decia "Tan libre como gratuito"

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #25 (permalink)  
Antiguo 01/02/2005, 13:03
 
Fecha de Ingreso: enero-2005
Mensajes: 17
Antigüedad: 19 años, 3 meses
Puntos: 0
oye tio muchisimas gracias, me has solucionado una papeleta, ya he conseguido ordenar la lista a mi gusto y pasarla completa al archivo asp que la va a actualizar.

que seria de nosotros sin estos foros.

un saludo y muchas gracias a todos.
  #26 (permalink)  
Antiguo 01/02/2005, 13:14
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
Código:
que seria de nosotros sin estos foros
Yo creo que seguiría regando y repartiendo flores, o despertándome a las 4:00 AM para recibir los periódicos aunque tal vez pelando cables coaxiales para insertarlos en conectores BNC... trabajando de data-entry o alguna otra cosa que ya ni recuerdo, pero seguro no estaría aquí
__________________
...___...
  #27 (permalink)  
Antiguo 01/02/2005, 13:20
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 4 meses
Puntos: 98
Cita:
oye tio muchisimas gracias, me has solucionado una papeleta
Jo'er, si para eso estamos

Cita:
Yo creo que seguiría regando y repartiendo flores, o despertándome a las 4:00 AM
Sho me despierto a las 4 AM para ir a trabajar vio

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #28 (permalink)  
Antiguo 01/02/2005, 13:39
 
Fecha de Ingreso: enero-2005
Mensajes: 17
Antigüedad: 19 años, 3 meses
Puntos: 0
estoy echando un ojo a tu codigo y tengo unas dudas, en relacion a las funciones de subir y de bajar

Cita:
function UpItem(myIndx)
{
.....
}

function DownItem()
{
myIndx2 = document.topCentralForm.mylist.selectedIndex;
.....
}


onclick="UpItem(document.topCentralForm.mylist.sel ectedIndex);"
onclick="DownItem();"
porque a una le pasas parametro y a la otra lo coges de otra forma, es por algo especial
  #29 (permalink)  
Antiguo 01/02/2005, 13:41
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
No, no, no... Esas son horas para regresar a tu casa o para levantarse de la cama a hacer pis y luego regresar a dormir... no para trabajar


__________________
...___...
  #30 (permalink)  
Antiguo 01/02/2005, 14:03
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 4 meses
Puntos: 98
Cita:
porque a una le pasas parametro y a la otra lo coges de otra forma, es por algo especial
Nomas por mal hechos que somos, ya sabes je je je, la verdad es que siempre salgo con una de esas cosas inconsistentes

Cita:
No, no, no... Esas son horas para regresar a tu casa o para levantarse de la cama a hacer pis y luego regresar a dormir... no para trabajar
No importa, ya sabes, vivo esperando el viernes
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
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 16:17.