Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-03-2017
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 79
Poder: 2
Soa Pelaez Va por buen camino
Pasar registros de una DBGrid a otra Dbgrid usando multiselect

Buen día.


Necesito que me ayuden, necesito pasar los datos que tengo en una dbgrid, el usuario puede ir seleccionando los registros que desea pasar y cuando el lo desee ya sea por medio de un botón o el evento scroll dichos datos seleccionados se pasarán a otra dbgrid que esta abajo y de la primera Dbgrid los datos pasados a la segunda desaparecerán.
De antemano muchas gracias.

Última edición por Soa Pelaez fecha: 08-03-2017 a las 01:51:46.
Responder Con Cita
  #2  
Antiguo 08-03-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.816
Poder: 9
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
En realidad mas que pasar registros de un DBGrid a otro, lo que queres hacer es copiar registros de un DataSet a otro. El DBGrid es una circustancia mas

La propiedad TDBGrid.SelectedRows contiene una lista de TBookmarks. Un TBookmark no es mas que un identificador, dentro de un TDataSet, de un registro, o si queres verlo de otra manera, es un identificador para cada fila de tu TDBGrid

La clase TDataSet posee metodos para posicionarse de un TBookmark a otro, lo cual se explica aca. Basicamente lo que hay que hacer es llamar al metodo GotoBookmark. Aca hay un ejemplo

La primer parte del problema ya la tendrias resuelta: recorrer las filas seleccionadas, posicionarse en cada una, y luego realizar la copia sobre el otro TDataSet

Hay una seccion en la documentacion dedicada a esto: Copying Data from Another Dataset

Tambien podes hacer la implementacion a lo "chapucero", es decir, si conoces la estructura del otro TDataSet, lo unico que hay que hacer es crear un nuevo registro en el DataSet destino (Append o Insert segun corresponda), setear los valores de los campos y luego invocar a Post

Sino conoces la estructura del DataSet de antemano, o tenes que copiar todos los campos, se puede implementar un recorrido sobre los campos (Fields) de un DataSet e ir copiando el valor campo a campo. Obviamente que los campos deben estar en el mismo orden, con el mismo nombre y mismo tipo de datos

Si no me equivoco puede que algunos componentes tengan implementado un metodo que hace justamente esto. por ej, FireDAC

Por ultimo el codigo de estas unidades, si bien no hace exactamente lo que necesitas, te pueda servir como guia para armar tu solucion:

https://github.com/ortuagustin/Delph...ee/master/Data

Por ejemplo, este:

Código Delphi [-]
function TFDMemTableDataSetCloner.CopyRecords(const Records: TArray; Source: TDataSet; Owner: TComponent): TDataSet;
var
  Copy: TFDMemTable;
  I: Integer;
begin
  Copy := TFDMemTable.Create(Owner);
  try
    Copy.CopyDataSet(Source, [coStructure, coRestart]);
    Source.DisableControls;
    try
      for I := Low(Records) to High(Records) do
      begin
        Source.GotoBookmark(Records[i]);
        Copy.Append;
        Copy.CopyFields(Source);
        Copy.Post;
      end;
    finally
      Source.EnableControls;
    end;
  finally
    Result := Copy;
  end;
end;
Responder Con Cita
  #3  
Antiguo 08-03-2017
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 79
Poder: 2
Soa Pelaez Va por buen camino
Necesito que me ayuden, necesito pasar los datos que tengo en una dbgrid, el usuario puede ir seleccionando los registros que desea pasar y cuando el lo desee ya sea por medio de un botón o el evento scroll dichos datos seleccionados se pasarán a otra dbgrid que esta abajo y de la primera Dbgrid los datos pasados a la segunda desaparecerán o almenos validarlos para que no se dejen repetir en caso de que el usuario vuelva a seleccionar los mismos por equivocación.
De antemano muchas gracias.
Responder Con Cita
  #4  
Antiguo 08-03-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 27.498
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No olvides nuestra guía de estilo, gracias
Responder Con Cita
  #5  
Antiguo 08-03-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 9.801
Poder: 27
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Otra opción:
Código Delphi [-]
//  SourceGrid.Options := SourceGrid.Options + [dgMultiSelect]

procedure CopyGridData( Source, Target: TDBGrid );
var
  i,j: Integer;
begin
  if Source.SelectedRows.Count > 0 then
  begin
    for i := 0 to Source.SelectedRows.Count-1 do
    begin
      Source.DataSource.DataSet.GotoBookmark( Pointer(Source.SelectedRows.Items[i]) );
      Target.DataSource.DataSet.Append;
      for j := 0 to Target.FieldCount-1 do
        Target.Fields[j].Value := Source.Fields[j].Value;
      Target.DataSource.DataSet.Post;
    end;
  end;
end;

llamada ej.:
Código Delphi [-]
procedure TForm1.btnCopy(Sender: TObject);
begin
  CopyGridData( SourceGrid, TargetGrid );
end;

Hace un tiempo se trató una variante aquí: Drag & Drop de una selección múltiple.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 08-03-2017 a las 12:53:08.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Agregar registros a una tabla usando dbgrid rufo Conexión con bases de datos 5 26-06-2015 18:10:40
Pasar de una Fila a Otra en Un DBGrid al Pulsar Enter hondaalberto Varios 5 02-07-2012 19:59:40
Pasar registros desde un dbgrid a otro dbgrid con botones.. Vales08 Varios 17 21-11-2011 19:27:50
Dbgrid y Multiselect jorge_mosquera OOP 3 26-04-2007 03:22:41
qrInforme de registros seleccionados (dbgrid multiselect) Mambo Impresión 2 07-12-2005 15:22:48


La franja horaria es GMT +2. Ahora son las 02:33:54.


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