guizans   01-11-2025, 19:35
#1
Expongo el problema, a ver si alguien se le ocurre una forma eficiente de hacerlo.

Tengo un GridView en el cual hay un listado de productos (latas, madera, harina, manzanas, etc) que recupero de una base de datos. El usuario puede seleccionar un producto de este listado y pulsando un botón, y lo mando a un TableView. El usuario puede modificar dos de los tres campos de cada productos, por ejemplo, volumen y peso. Es decir, lo que ve el usuario cuando le da al botón es una fila con productos, volumen y peso, y estos dos últimos son los que puede modificar. 

Hasta aquí no hay ningún problema. Lo que me gustaría es que haya dos botones al lado del TableView para subir o bajar los productos que se vean en el listado, es decir, que los pueda ordenar al gusto. Y aquí es donde no se me ocurre como plantear el problema. ¿Quizá con una serie de arrays que estén en el mismo orden que el TableView? Por que una cosa importante es el ID de cada producto, que no se muestra pero es importante, ya que tengo que guardar ese listado tal como el usuario lo ha ordenado en una base de datos. Le he estado dando vueltas y no se me ocurre nada.

¿Alguien me puede orientar?

Muchas gracias.
Harpo   03-11-2025, 00:06
#2
A ver si lo he entendido bien, tiene un GridView-TableView con productos que muestra tres columnas: Productos, Volumen y Peso. Y quiere ordenar por la columna Productos. Además tiene otro valor asociado al producto, su ID, que no se muestra. Y al final quiere guardar la información del TableView en una base de datos, ordenado por el orden que aparece en el TableView.

Pues depende del origen de los datos y en cierta medida de cómo cargue el TableView, normalmente se suele hacer con el evento Data. Si el origen de los datos es una base de datos se puede ordenar desde ahí con un "Order by". Si el origen es otro habría que ver cual para poder determinar la manera más eficiente. El volumen de datos es importante para las ordenaciones.

Si tiene Productos y su ID puede usar una clase Collection, cargar como Key el producto y como Value el ID. Después tiene la posibilidad de ordenar los productos con "cProductos.Keys.sort()" y cargar el TableView. Le adjunto un ejemplo rápido para que vea posibilidades.

En cuanto a grabar en base de datos el listado ordenado no le veo sentido. Una cosa es cómo lo guarda y otra cómo lo extrae. Aunque si usa Sqlite todas las tablas tienen un campo por defecto llamado "rowid", es un identificador único que se incrementa a cada fila que se graba.

Si me da más detalle intentaré echarle una mano.
Un saludo, Harpo.

.gz
TestSort-0.0.1.tar.gz (Tamaño: 8.51 KB Descargas: 0)
Harpo   03-11-2025, 09:52
#3
Dándole una vuelta a su problema con el café de la mañana me he acordado de otra posibilidad.
Si usa una clase para sus productos puede usar también un array de esa clase e implementar el método especial _compare

Le adjunto un nuevo ejemplo, hay un nuevo formulario para este enfoque y una clase CProductos con ese método. Y un par de botones para subir y bajar el producto en la lista.

Un saludo, Harpo.

.gz
TestSort-0.0.2.tar.gz (Tamaño: 9.24 KB Descargas: 1)
Shordi   03-11-2025, 18:41
#4
Este problema (o algo muy parecido) lo traté en este vídeo:



No es exactamente lo mismo porque el movimiento no se hace con botones de arriba o abajo, si no con drag & drop, pero creo que implementar esos botones debe ser algo trivial. Dime si te sirve y si tienes alguna duda o petición, estoy a tu disposición.

Saludos.

No podemos regresar
Rufs   05-11-2025, 20:43
#5
Acredito que você deseja ordenar sua lista manualmente e salvar essa sequência, para que posteriormente ela seja carregada conforme o ajuste realizado.
Em anexo, segue um exemplo.

Creo que quieres ordenar tu lista manualmente y guardar ese orden para poder cargarlo posteriormente según los ajustes realizados. 
Adjunto un ejemplo.
Archivos adjuntos
.gz
Novo.tar.gz (Tamaño: 14.76 KB Descargas: 1)
guizans   05-11-2025, 23:26
#6
Gracias Harpo.

Los datos no se cargan de una base de datos, los va añadiendo el usuario cuando hace click en un GridView. Esa parte es la fácil, lo que más me cuesta es que el usuario lo pueda ordenar como quiera, sin que sea alfabéticamente.

Shordi. He visto tú vídeo, muy interesante como siempre, a ver si lo adapto a mi proyecto y os cuento.

Un saludo.
vuott   Hoy, 01:14
#7
Me gustaría hacer mi pequeña contribución:

https://www.gambas-it.org/wiki/index.php...a_GridView
https://www.gambas-it.org/wiki/index.php...na_colonna
https://www.gambas-it.org/wiki/index.php...a_GridView

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
  
Usuarios navegando en este tema: jguardon, Rufs, 2 invitado(s)
Powered By MyBB, © 2002-2025 MyBB Group.
Made with by Curves UI.