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.