Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   mover filas dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=83745)

DavidSG4 23-07-2013 10:22:21

mover filas dbgrid
 
Buenas chic@s.

tengo un problema y es que no se como poder mover las filas de un dbgrid he pensado que la mejor opcion seria poner un boton arriba y abajo en el formulario y segun la fila seleccionada la mueva arriba y abajo, tambien podria hacerse con el raton y moverla a la posicion que queramos....

pero claro esto son ideas lo que no se es como hacerlo

podeis ayudarme?

trabajo con delphi 5 ya se que debo cambiar pero ya sabeis.... los jefessssss.....

Casimiro Notevi 23-07-2013 10:55:52

Si es un dbgrid entonces está enlazado a un dataset mediante un datasource, por lo tanto, no puedes mover las filas, tienes que cambiar el orden en el dataset (sql o tabla).

Neftali [Germán.Estévez] 23-07-2013 12:05:38

Siguiendo con lo que comenta Casimiro....
¿Ese DBGrid está conectado a una tabla?
¿Los registros de esa tabla tienen un orden? ¿Tienes sentido cambiar ese orden?
¿Tienes algún campo para cambiar ese orden?

DavidSG4 23-07-2013 12:17:34

ordenar dbgrid
 
bueno os lo explico un poco mejor todo...

Esa tabla que tiene el dbgrid asociado mediante el datasource es una tabla en la que se introducen estados de producción hasta aquí todo bien si este proceso no fuera dinámico y según resultados de producción las piezas siguen un proceso u otro entonces lo que necesito es tener el grid con un estado inicial por ejemplo operaciones

1,2,3,4,5 que tienen que cambiar a 1,4,3,2,5 y necesito un metodo que me permita bajar o subir la tupla seleccionada del grid


a ver si se os ocurre algo

y gracias por vuestra pronta salida al rescate:)

Neftali [Germán.Estévez] 23-07-2013 12:33:21

En ese caso debes modificar los registros en la tabla.
Es decir, si los registros se muestran ordenados por un NUM_OPERACION, para cambiar el orden en el DBGrid, realmente debes cambiar el orden en la tabla, por lo tanto deberás hacer un Update en los registros para modificar el NUM_OPERACION y que en el DBGrid se muestren como quieres.

El problema a esto es que si tienes muchos registros, cambiar el orden significa hacer muchos Updates. Esta técnica se suele hacer cuando hay pocos regitros (10 como máximo, te diría yo).
Si los registros son muchos, deberías "volcarlos a memoria" (utilizar ClientDataset o similar), realizar las operaciones en memoria y al final pasarlas todas a la Base de Datos.

ElDioni 23-07-2013 13:30:29

Hola, yo hice algo parecido hace un tiempo, lo primero que te diría es que te instalaras el SMDBGrid que es gratuito, ¿porqué?, porque si no recuerdo mal el DBGrid normal que lleva delphi no disparaba el código en el MouseDown y había que programar un parche para conseguirlo, además el SMDBGrid tiene más opciones que el DBGrid que pueden resultarte útiles.

Que hacía yo, en el MouseDown, capturaba el orden que tenía el registro seleccionado en una variable, permitía en el DBGrid el Drag&Drop para que aceptara el arrastre de registros dentro del mismo DbGrid. Cuando hacía el Drop capturaba en otra variable el registro en el que me había posicionado, había que saber si el registro lo había movido hacia una posición superior o inferior, a partir de ahi, si lo había movido a una posición superior, tenía que hacer un update de +1 en el orden, a todos los registros que fueran mayor o igual que el registro donde quería colocar el nuevo registro hasta los que fueran menor que el registro original que había movido, algo así.

Te darás cuenta de que tienes que controlar más cosas, tabla vacía, un solo registro, orden de los nuevos registros, etc.

Espero haberte ayudado en algo.

Saludos.

DavidSG4 24-07-2013 09:48:44

ordenar dbgrid
 
Muchas gracias intentare lo que me dices a ver si puedo conseguir algo

aunque lo veo un poco complicado de hacer pero se intentará

Gracias

si hay mas ideas estoy abierto a cualquiera

ElDioni 24-07-2013 09:52:33

Bueno, si lo haces con botones sería más fácil,

controlando la primera y última posición solo tendrías que cambiar el orden del registro que quieres subir o bajar por el siguiente.

Saludos.

DavidSG4 24-07-2013 09:53:14

Cita:

Empezado por ElDioni (Mensaje 464341)
Hola, yo hice algo parecido hace un tiempo, lo primero que te diría es que te instalaras el SMDBGrid que es gratuito, ¿porqué?, porque si no recuerdo mal el DBGrid normal que lleva delphi no disparaba el código en el MouseDown y había que programar un parche para conseguirlo, además el SMDBGrid tiene más opciones que el DBGrid que pueden resultarte útiles.

Que hacía yo, en el MouseDown, capturaba el orden que tenía el registro seleccionado en una variable, permitía en el DBGrid el Drag&Drop para que aceptara el arrastre de registros dentro del mismo DbGrid. Cuando hacía el Drop capturaba en otra variable el registro en el que me había posicionado, había que saber si el registro lo había movido hacia una posición superior o inferior, a partir de ahi, si lo había movido a una posición superior, tenía que hacer un update de +1 en el orden, a todos los registros que fueran mayor o igual que el registro donde quería colocar el nuevo registro hasta los que fueran menor que el registro original que había movido, algo así.

Te darás cuenta de que tienes que controlar más cosas, tabla vacía, un solo registro, orden de los nuevos registros, etc.

Espero haberte ayudado en algo.

Saludos.

para el dbgrid si que hay onmousedown y el onmouseup (a modo de aclaracion)

ElDioni 24-07-2013 10:38:06

Cita:

Empezado por DavidSG4 (Mensaje 464407)
para el dbgrid si que hay onmousedown y el onmouseup (a modo de aclaracion)

Efectivamente el OnMouseDown y el OnMouseUp están pero, por hacer una prueba, pon un showmessage('Hola'); en el OnMouseDown de un DBGrid y dime que ocurre.

Saludos.

DavidSG4 25-07-2013 10:06:04

ordenar dbgrid
 
Cita:

Empezado por ElDioni (Mensaje 464409)
Efectivamente el OnMouseDown y el OnMouseUp están pero, por hacer una prueba, pon un showmessage('Hola'); en el OnMouseDown de un DBGrid y dime que ocurre.

Saludos.

yo tengo hecho operaciones con el mouseup y si que me funcionan...por ejemplo tengo un dbgrid y quiero quedarme con una parte tupla de ese grid y con el onmouseup meto esos registros en edit's

Gracias tio

ElDioni 25-07-2013 12:11:42

Cita:

Empezado por DavidSG4 (Mensaje 464487)
yo tengo hecho operaciones con el mouseup y si que me funcionan...por ejemplo tengo un dbgrid y quiero quedarme con una parte tupla de ese grid y con el onmouseup meto esos registros en edit's

Gracias tio

Hola,

si te fijas en lo que te escribí no me refería al mouseup sino al mousedown, que es donde te dije que hicieras la prueba para ver si se disparaba el código.

Saludos.

DavidSG4 26-07-2013 12:07:12

Cita:

Empezado por ElDioni (Mensaje 464492)
Hola,

si te fijas en lo que te escribí no me refería al mouseup sino al mousedown, que es donde te dije que hicieras la prueba para ver si se disparaba el código.

Saludos.

llevas razon tio.. yo lo tengo en el up jejej


La franja horaria es GMT +2. Ahora son las 23:04:34.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi