Ir al contenido


Foto

Arrastrar y soltar entre dos DBgrids

drag and drop TDBGrid

  • Por favor identifícate para responder
10 respuestas en este tema

#1 Gaston

Gaston

    Advanced Member

  • Miembros
  • PipPipPip
  • 109 mensajes

Escrito 08 marzo 2017 - 06:33

c841a561981e8d6ad6fcbe97eaa5db35o.png

 

Hola, desconozco si se puede, la idea es que el usuario pueda arrastrar una o varias cuentas del DBGrid de la izquierda y soltarlo en el otro DBGrid. Quizás existe un componente más práctico para esta tarea?

O debo incluir un TButton "Pasar cuentas" y manejarlo por ese lado?

 

Escucho sugerencias y gracias de antemano.

 

Saludos.


  • 0

#2 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 08 marzo 2017 - 07:39

Creo que hay un ejemplo de esto entre las demos. Pero que emplea StringGrid.

Según recuerdo la demo aplica la técnica de botones >, >>, <, << para mover uno o todos en ambos lados.

 

Ahora bien, el DBGrid ya es otro cantar. Y esto se debe a que éstos son una abstracción de un conjunto de datos (tabla, consulta, etc) proveniente desde una base de datos y como tal, el paso de uno a otro implica en realidad relacionar operaciones sobre la base de datos. Mover de un lado a otro implica realizar operaciones INSERT en el destino, y un DELETE (debería, teóricamente) en el de origen.

 

De poder se puede hacer con la técnica Drag & Drop. Debes manejar creativamente los eventos OnDragDrop, OnDragOver, y OnEndDrag para determinar el estado y validar tanto si el control o lo que deseamos "mover" es posible enviar de un lado a otro. Al momento de aceptar el drag & drop lo que debes hacer es recorrer la lista de item seleccionados y proceder a efectuar inserciones y eliminaciones.

 

En cierto modo, hacerlo por botones es más fácil. Aunque la idea de poder arrastrar es interesante.

 

Saludos,


  • 0

#3 FerCastro

FerCastro

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 636 mensajes
  • LocationCiudad de México

Escrito 09 marzo 2017 - 10:19

Si te sirve:

 

http://delphiaccess....11643-dragdrop/

 

Saludos!


  • 0

#4 Gaston

Gaston

    Advanced Member

  • Miembros
  • PipPipPip
  • 109 mensajes

Escrito 09 marzo 2017 - 02:24

Delphius, estuve buscando y buscando... y si no hay casi nada y lo poco que hay es demasiado complejo y creo que no se justifica.

 

En cierto modo, hacerlo por botones es más fácil. Aunque la idea de poder arrastrar es interesante.

Totalmente de acuerdo, más para un sistema administrativo, nos resulta interesante y luego los usuarios no lo ven del mismo modo.

Al final me puse a investigar el TTreeView, que por cierto no hay un tutorial como la gente en ningún lado, y me decidí por esta alternativa así que FerCastro tu código me puede servir, porque es exactamente lo que me propongo hacer, pasar de un TV a un DBGrid, lo haría con botones de todas formas pero darle al usuario la opción de drag and drop sería lo óptimo.

 

Ahora mismo estoy buscando como agregar un chechbox a cada elemento del TV. Cuando lo termine posteo el código.

 

Saludos.

 

2a69e16c21a591ff551642a6cf6ba749o.png


  • 0

#5 Gaston

Gaston

    Advanced Member

  • Miembros
  • PipPipPip
  • 109 mensajes

Escrito 09 marzo 2017 - 05:45

Perdón, si quieren borren el post, me estoy volviendo loco con un componente como TTreeView que pensaba era sencillo, abandono e iré a lo que domino, los DBGrid, a uno le agrego una columna boolean, par de botones y listo.

 

Saludos.


  • 0

#6 FerCastro

FerCastro

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 636 mensajes
  • LocationCiudad de México

Escrito 10 marzo 2017 - 11:21

Perdón, si quieren borren el post, me estoy volviendo loco con un componente como TTreeView que pensaba era sencillo, abandono e iré a lo que domino, los DBGrid, a uno le agrego una columna boolean, par de botones y listo.

 

Saludos.

 

Gastón, que deseas hacer con el ttre view? no lo he usado mucho pero supongo que todo es posibe con los bytes correctos.


  • 0

#7 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 10 marzo 2017 - 12:32

No desesperes.
Busca en los foros sobre TreeView, tengo el recuerdo de que ya alguien comentó sobre como incluirle un checkbox.
Te invito a que nos comentes que te está fallando. Que código probaste... Y errores que te surgen. Para eso estamos.

Saludos
  • 0

#8 FerCastro

FerCastro

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 636 mensajes
  • LocationCiudad de México

Escrito 10 marzo 2017 - 04:28

Perdón, si quieren borren el post, me estoy volviendo loco con un componente como TTreeView que pensaba era sencillo, abandono e iré a lo que domino, los DBGrid, a uno le agrego una columna boolean, par de botones y listo.

 

Saludos.

 

San Google...

 

 

https://www.thoughtc...reeview-4077866


  • 0

#9 Gaston

Gaston

    Advanced Member

  • Miembros
  • PipPipPip
  • 109 mensajes

Escrito 10 marzo 2017 - 11:35

No desesperes.
Busca en los foros sobre TreeView, tengo el recuerdo de que ya alguien comentó sobre como incluirle un checkbox.
Te invito a que nos comentes que te está fallando. Que código probaste... Y errores que te surgen. Para eso estamos.

Saludos

 

Delphius, te agradezco mucho, de verdad, si logré arrancar con Lazarus (y Free Pascal y SQL) fue gracias a ustedes, lo valoro y tengo muy presente.

Estuve meta probar código, me paseé por todos los sitios habidos y por haber, le dediqué muchas horas y esta vez no pude. Hay demasiada variedad de código para este componente que lo supuse mucho más simple como un TDBLookUpListBox, es decir, para abreviar, muy confuso todo, cada ejemplo que encontré con un algoritmo distinto, me maree. Hay mejor info para el VirtualTV pero es para Windows.

Otro tema es el tiempo, la verdad no me sobra.

 

FerCastro gracias, pero ya pasé por ese link, usé todos los buscadores DDG, Google, Bing, me faltaron Yandex y Baidu...

 

Ya lo tengo resuelto con DBGrids, multiselet y botones. Es algo bastante simple, no obstante si a alguien le interesa el código lo posteo con gusto.

 

Perdí una batalla, no la guerra, cuando tenga tiempo volveré a la carga con el TreeView.

 

Saludos.


  • 0

#10 FerCastro

FerCastro

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 636 mensajes
  • LocationCiudad de México

Escrito 15 marzo 2017 - 12:43

Delphius, te agradezco mucho, de verdad, si logré arrancar con Lazarus (y Free Pascal y SQL) fue gracias a ustedes, lo valoro y tengo muy presente.

Estuve meta probar código, me paseé por todos los sitios habidos y por haber, le dediqué muchas horas y esta vez no pude. Hay demasiada variedad de código para este componente que lo supuse mucho más simple como un TDBLookUpListBox, es decir, para abreviar, muy confuso todo, cada ejemplo que encontré con un algoritmo distinto, me maree. Hay mejor info para el VirtualTV pero es para Windows.

Otro tema es el tiempo, la verdad no me sobra.

 

FerCastro gracias, pero ya pasé por ese link, usé todos los buscadores DDG, Google, Bing, me faltaron Yandex y Baidu...

 

Ya lo tengo resuelto con DBGrids, multiselet y botones. Es algo bastante simple, no obstante si a alguien le interesa el código lo posteo con gusto.

 

Perdí una batalla, no la guerra, cuando tenga tiempo volveré a la carga con el TreeView.

 

Saludos.

 

Estimado Gastón,

 

Comienzo a trabajar con CodTyphon/Lazarus, y creeme que es un dolor de h... pues entiendo que no se come todo el código Delphi, y salvo uno que otro detalle, jala bien.

 

Con respecto de tu problema con el Drag&Drop, recién terminé de implementar el ejemplo que puse hace unos meses, pero ahora en Laz. Dos detalles:

 

- Por alguna razón si trabajo mis objetos Query (son Zeos) desde un DataModule estos me marcan error, y no se por qué. Pero solo los paso a la forma de trabajo y listo.

- En Delphi trabajo con un objeto muy versátil que se llama Virtual Table. En CodeTyphon hay un componente que funciona exactamente igual. Una estructura de datos en memoria para manejo de los mismos de forma temporal, una maravilla.

 

Te dejo dos imágenes, este proyecto permite hacer drag and drop desde el árbol de departamentos, y pasa todos los empleados del departamento, o bien, desde el grid inferior izquierdo y pasa solo el empleado seleccionado. 

 

Te sirve? porque bien a bien no dijiste que quieres hacer,, y cual es el problema que tienes.

 

Saludos!!

Archivos adjuntos


  • 1

#11 Gaston

Gaston

    Advanced Member

  • Miembros
  • PipPipPip
  • 109 mensajes

Escrito 16 marzo 2017 - 12:05

Hola FerCastro se ve muy bien eso y CodeTyphon también, el problema es que no se manejar un TTreeView es decir, me faltan conocimientos y como expliqué antes, no encuentro documentación clara del componente.
 

la idea es que el usuario pueda arrastrar una o varias cuentas del DBGrid de la izquierda y soltarlo en el otro DBGrid.

 Sí que dije que quería hacer, por ahí me faltó explicarlo mejor, es un error que suelo cometer de apurado que soy...
 
CodeTyphon lo quise instalar y no pude (en Linux).
 

- Por alguna razón si trabajo mis objetos Query (son Zeos) desde un DataModule estos me marcan error, y no se por qué. Pero solo los paso a la forma de trabajo y listo.

 
Creo que te puedo ayudar porque me pasa lo mismo, en el .lpr crea el data module antes del primer Form. Además en la unit en uses incluí el data module, calculo que esto último lo haces.
 


delphi
  1. begin
  2. RequireDerivedFormResource:=True;
  3. Application.Initialize;
  4. Application.CreateForm(TDMPri, DMPri); // Data module
  5. Application.CreateForm(TDMConta, DMConta); // Data module
  6. Application.CreateForm(TDMrc, DMrc); // Data module
  7. Application.CreateForm(TDMic, DMic); // Data module
  8. Application.CreateForm(TDC, DC); // Data module
  9. Application.CreateForm(TfrmPrincipal, frmPrincipal); // Formulario principal
  10. ...

También uso Zeos, al principio me costó pero ya lo tengo bastante dominado. Fijate que tiene que funcionar, es muy cómodo poner todo en el data module, incluso los reportes. Si eso no lo soluciona avisame a ver que otra cosa puede ser.

 

Al final lo dejé así, no es lo ideal pero funciona :p

 

Saludos.

 

e085822218bc562c58c40c50926424cdo.png


  • 0




IP.Board spam blocked by CleanTalk.