Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-11-2009
agustibaldo agustibaldo is offline
Miembro
 
Registrado: nov 2006
Posts: 105
Poder: 18
agustibaldo Va por buen camino
Drag&Drop entre dos DBGrid con multiselección

Amigos de ClubDelphi, en esta oportunidad les consulto.

Tengo dos grillas desde las cuales tengo que intercambiar (mover) entre una y otra de forma indistinta.
Puede darse el caso de tener que mover un solo registro o varios (haciendo multiselección)

Tengo implementado el proceso de Drag&Drop y funciona "parcialmente" para cuando intento mover un solo registro.

Les paso el código para graficárselos mejor:

Código Delphi [-]
procedure TForm1.DBGrid2DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
   Accept := Source IS TDBGrid;
end;

Código Delphi [-]
procedure TForm1.DBGrid1ColEnter(Sender: TObject);
begin
   DBGrid1.BeginDrag(False,10);
end;

Código Delphi [-]
procedure TForm1.DBGrid2DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
   try
       if TDBGrid(Source).Name = 'DBGrid1' then
       begin
          if not Table2.FindKey([Table1Cuenta.AsInteger, Table1Zona.AsInteger, Table1Mes.AsDateTime]) then
          begin
                 Table2.Insert;
                 Table2Cuenta.AsInteger := Table1Cuenta.AsInteger;
                 Table2Zona.AsInteger := Table1Zona.AsInteger;
                 Table2Mes.AsDateTime := Table1Mes.AsDateTime;
                 Table2Sucursal.AsInteger := Table1Sucursal.AsInteger;
                 Table2Importe.AsFloat := Table1Importe.AsFloat;
                 Table2.Post;
          end
          else
          begin
             MessageDlg('El registro que intenta insertar ya existe.', mtError, [mbOk], 0);
          end;
       end;
   finally
       DBGrid1.EndDrag(True);
   end;
end;

Y digo "parcialmente" porque si bien la inserción y el movimiento entre ambas (para el ejemplo solo implementado de izq. a der.) funciona correctamente se me presentan dos cuestiones:
  • Para el caso que mueve un solo registro; al implementar el Begindrag en OnColEnter de la grilla, la 1º vez que lo realizo me captura este evento pero si intento nuevamente arrastrar otro registro pero partiendo de la misma columna, es decir, haciendo click en otro registro pero sobre la misma columna que la anterior no captura el evento. Debo hacer click sobre otra columna de la grilla para que vuelva a capturar y pueda arrastrar el registro.
  • El mayor inconveniente se presenta cuando intento arrastrar mas de un registro.
    Les comento la lógica: habilito el MultiSelect en la grilla y selecciono 2 o más registros manteniendo presionada la tecla Control. Pero cuando suelto Control y quiero hacer click sobre una de las filas seleccionadas para comenzar a arrastrar se despintan las otras seleccionadas y queda solo la que hice clic.

Se les ocurre alguna forma de solucionar estos inconvenientes?

Desde ya, un millón de gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Drag & Drop entre dos ListViews MaMu OOP 4 30-07-2008 17:39:36
Drag and Drop entre DBGrids pborges36 OOP 9 20-09-2007 22:25:47
dbgrid y drag&drop jepes OOP 0 08-05-2006 12:51:58
drag&drop en DBGRID JoseQ Varios 1 23-08-2004 15:29:39
Drag&Drop entre dos TreeView ceocarbajal OOP 1 08-05-2004 09:21:41


La franja horaria es GMT +2. Ahora son las 10:48:00.


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
Copyright 1996-2007 Club Delphi