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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-12-2011
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
¿Como sincronizar dos o mas Grids?

Sigo con el detalle que he venido comentando en posts anteriores, pero ya vamos saliendo, ahora estamos en la etapa de "emebellicimiento".

Sean n Forms del mismo tipo que muestran información anual de una sucursal seleccionada, estos forms son tipo MDIChild por lo que podemos tener abiertos los que deseemos.

La funcionalidad que busco es que mediante un mensaje todos los grids de esas forms (del mismo tipo) queden sincronizados de manera que si movemos cualquier cosa en uno, los demás repliquen el mismo movimiento. De esta forma podemos tener 2 o 3 forms correspondientes a diferentes sucursales y poder compara la información más fácilmente.

El enfoque tiene que ir sobre el grid y no sobre el dataset ya que en algunos casos no tienen las mismas filas aunque todos tienen las mismas columnas.

Espero el aguacero de ideas.

Saludos
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #2  
Antiguo 23-12-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Thumbs up

Bueno... habría que ver mas profundamente lo que estas tratando de hacer...., sin embrago, en lo que he podido entender creo que debemos tomar en cuenta lo siguiente:
  1. Dices que la sincronizacion de los DBgrid no deben ser a nivel del DataSet, pues en ese caso, todos sabemos que el DBGrid no es mas que un reflejo del Dataset, para lograr eso, pues podria ser que se utilice temporalmente componentes ClientDataSet, aunque como repito, no me cabe la idea de por que no hacerlo direntamente con los DataSet, ya nos explicarás las Razones.
  2. Para Sincronizar los formularios se podria crear nuestro propio Mensaje personalizado y enviarselo con alguna API de Windows (PostMessage o SendMessage) a todas las ventanas en cuention; desde luego eso implica que debemos capturar tal Mensaje(Message) y procesarlo en cada formulario.
Bueno solo es un idea...
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #3  
Antiguo 23-12-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 beholdecfisa is a splendid one to behold
Hola.

Según entiendo los campos que se visualizan en el DBGrid son comunes pero los datos que contienen pueden ser diferentes para cada sucursal. Pero al igual que Roberto no visualizo bién el sentido de hacer la actualización basándose en el DBGrid. Suponiendo que seleccionemos la línea 'n' y sincronicemos todos los DBGrids a ese número de línea, el efecto estaría logrado, mas los datos mostrados seguramente no tengan relación alguna. (Quizá este diciendo un desvarío ya que no alcanzo a entender claramente la situación)

En cuanto a como hacer la sincronización puede ser mediante mensajes, como ya sugirió Roberto, o mediante eventos. Lo que no tengo en claro es en base a que factor debe ser echa.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 23-12-2011
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
supongamos 3 grids en sus ventanas "apiladas" (tile), tome la que quiero usar como "maestra" y veo que tiene 5 filas, las demás tienen igual 5 o menos, pero los campos son exactamente las mismas.

El comportamiento a reproducir es que si movemos el scrollbar o bien la celda con el foco en nuestro grid maestro, esto se replique en los demás grids, obviamente los que tengan menos filas o solo una quedarían en el mismo lugar, la idea principal es que en todo momento todas las grids tengan seleccionado el mismo campo ya que su estructura es idéntica.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #5  
Antiguo 23-12-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 beholdecfisa is a splendid one to behold
Cita:
Empezado por AzidRain Ver Mensaje
supongamos 3 grids en sus ventanas "apiladas" (tile), tome la que quiero usar como "maestra" y veo que tiene 5 filas, las demás tienen igual 5 o menos, pero los campos son exactamente las mismas.

El comportamiento a reproducir es que si movemos el scrollbar o bien la celda con el foco en nuestro grid maestro, esto se replique en los demás grids, obviamente los que tengan menos filas o solo una quedarían en el mismo lugar, la idea principal es que en todo momento todas las grids tengan seleccionado el mismo campo ya que su estructura es idéntica.
Hola AzidRain.

Hice este código que creo que en líneas generales hace lo que buscas.

MDIForm:
Código Delphi [-]
...
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus,
  Unit2; // form DBGrid emisor (maestro)

type
  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
  private
     procedure GridChange(Sender: TObject; Valor: string);
  public
  end;

var
  Form1: TForm1;

implementation {$R *.dfm}

uses Unit3, Unit4; // forms con DBGrids receptores

procedure TForm1.FormShow(Sender: TObject);
begin
  with TForm2.Create(Self) do
    GridOnChange:= GridChange;
  TileMode:= tbVertical;
  Tile;
end;

procedure TForm1.GridChange(Sender: TObject; Valor: string);
begin
  Form3.DBGrid1.DataSource.DataSet.Locate('Campo',Valor,[]);
  Form4.DBGrid1.DataSource.DataSet.Locate('Campo',Valor,[]);
  // demas forms si los hay
end;
...

MDIChild emisor (maestro):
Código Delphi [-]
...
type
  TGridChangeEvent = procedure(Sender: TObject; Valor: string) of object;
  TForm2 = class(TForm)
    DataSet: TTable;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    procedure DataSetAfterScroll(DataSet: TDataSet);
  private
    FGridChange: TGridChangeEvent;
  public
    property GridOnChange: TGridChangeEvent read FGridChange write FGridChange;
  end;

var
  Form2: TForm2;

implementation {$R *.dfm}

procedure TForm2.DataSetAfterScroll(DataSet: TDataSet);
begin
  if Assigned(FGridChange) then
    FGridChange(Self,DataSet.FieldByName('Campo').AsString);
end;
...
Es decir el MDIForm es el encargado de posicionar los DBGrids receptores cuando es disparado el evento TGridChangeEvent en el form que contiene el DBGrid 'maestro' (Form2 en el ejemplo).

Espero te ayude o al menos te hacerque alguna idea...

Un saludo.

Edito: (El tercer y cuarto MDIChilds están en creación automática para simplificar el ejemplo)
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 23-12-2011 a las 14:28:43. Razón: agregar comentario
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
como sincronizar 2 DBLookupComboBox JerS Varios 4 12-04-2011 05:49:08
Cómo sincronizar Query y tabla David Conexión con bases de datos 2 13-07-2006 12:18:50
Grids.pas Pook Varios 3 05-05-2006 14:11:13
String Grids naker OOP 4 02-09-2004 08:12:46
Grids... superhopi Conexión con bases de datos 3 17-08-2004 17:22:41


La franja horaria es GMT +2. Ahora son las 03:10:09.


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