Drag and Drop para cambiar lugar de un registro en una lista


([N2] gustavosandoval) #1

Hola!
Tengo una lista que ordeno por un campo “Orden”, al que doy valor en el alta sumando 10 al ultimo registro. Quiero poder mover los registros para ponerlos en el lugar de la lista que se quiera, porque hay valores que cambian segun el lugar. Lo estoy haciendo con dos botones. En dos procesos, resto o sumo 1 al campo “Orden” para que se mueva para arriba o abajo respectivamente, y con el nuevo orden recorro la lista entera y re-establezco los valores de “Orden” desde 10. Funciona bien. Pero asi se mueve línea por línea y cada vez tengo que volver a seleccionar la línea que muevo, haciendo muy lento el procedimiento. Lo óptimo seria poder mover con Drag and Drop en la misma rejilla y soltar en el lugar donde lo quiero. En la vERP se usa el Drag and Drop para ordenar presupuestos, por ejemplo, pero solo recorre la lista y suma 1 al último registro, y el orden que queda es aparentemente aleatorio y no entiendo para que sirve(¿…?).
A alguien se le ocurre algo que me pueda ayudar?
un saludo!


([N3] pacosatu) #2

Hola Gustavo.

Ordenar en pantalla una lista por un campo Orden tiene implicaciones poco óptimas, ya que desde el primer plano debemos ejecutar actualizaciones repetidas de una Lista de registros.

En cualquier caso tengo un ejemplo de Drag and Drop en la aplicación de ejercicios --> vatp://pruebas:pruebas@v7cloud6.velneo.com:8894/0PS_Varios_iapp.

En la rejilla de la derecha (Provincias ordenadas) puedes hacer drag and drop dentro de la misma rejilla y se ordena por la columna Orden. Se usa una tabla temporal para las operaciones de drag and drop y de esta forma acelerar las operaciones. Al pulsar Guardar se sincroniza la tabla temporal con la tabla física.

Si te sirve podemos comentar el código que he usado.

Saludos
Paco Satué


([N2] gustavosandoval) #3

Hola Paco,
Si, ya sabia que esta operación no es óptima, y menos cuando algunos campos dependen de los valores en otras filas de la rejilla. Estoy pensando como hacer para optimizarlo. Pero, de todos modos estas listas muestran registros plurales de un maestro y nunca seran mas de 10, mas o menos, y la velocidad con que me funciona es “aceptable” para estar en la nube (2 o 3 seg.).
Sí que me interesa tu ejemplo, Paco, porque funciona casi como yo pretendo en mi caso. Lo de crear una tabla en memoria lo habia pensado pero todavia no lo he probado, un poco por pereza, porque significa replicar todo lo que tengo hecho. Ademas una vez creados los registros físicos tengo el mismo problema cuando quiero modificar algun dato de estos registros.
Te agradeceria que me comentes como has hecho esto. Principalmente como haces para que el registro arrastrado se ubique donde se quiera. Mi rejilla es multiselección, para poder borrar varios registros a la vez, pero puedo cambiarlo si es necesario.
un saludo!
Gustavo


([N3] pacosatu) #4

Hola Gustavo.

Tienes disponible la ayuda de este ejercicio a través de Ctrl+F1 que te llevará a http://s673560093.mialojamiento.es/web_ayudavelneoejem/DragDrop.html.

He actualizado la parte del código específico del drag&drop en las Rejillas.
Verás lo siguiente:

  • En el objeto Drop de la Rejilla se ejecuta el proceso que ubica el registro Origen del drop en la nueva posición. Los registros de la Rejilla destino, si es necesario, abren hueco incrementando su ORDEN en 1.
  • En el evento “Drop finalizado” de la Vista de datos se renumera el campo ORDEN para que sea secuencial.

Pruébalo.

Saludos
Paco Satué


([N2] gustavosandoval) #5

Vale, ayer esa dirección no tenia nada. Lo veré con detenimiento. Igual he mejorado el tiempo de cálculos de los campos que dependen de campos de filas anteriores. Por ejemplo, cuando elimino una fila, primero renumero y luego en un proceso en 3P busco toda la lista, hago los calculos con el nuevo orden y la devuelvo. Ahora tarda mas o menos 1.15 segundo.
Bueno, yo sigo el martes, veo que tu estas activo hasta en fiestas, te da para todo, eres un fenomeno.
Gracias Paco!!!, ya te cuento como me queda.
un saludo!
Gustavo


([N2] gustavosandoval) #6

Ya lo tengo programado. He hecho un par de cosas de forma distinta para adaptar el codigo a mi caso y funciona perfectamente. Y he aprendido a usar el Drag & Drop.
Gracias Paco!! No solo por esto, viendo los demas ejemplos, creo que no sera la última vez que te consulte.
Un gran saludo!
Gustavo


([N2] gustavosandoval) #7

Me he quedado pensando que sería óptimo que se pudiera destacar de alguna manera la fila de destino, cambiandole el color o algo así. No creo que se pueda, porque esto depende de Velneo, ¿no? o se te ocurre algo?


([N3] pacosatu) #8

Hola Gustavo.

Me alegro que lo hayas resuelto y sobre todo que los ejercicios que en su día yo hize para aprender la herramienta ahora sirvan para algo.

Lo de iluminar la fila de destino, efectívamente no tenemos control sobre eso. Eso ya es un tema de rematar más o menos bien los objetos visuales de Velneo y en ese aspecto siempre le he dado un suspenso a los chicos de desarrollo.

Saludos
Paco Satué