PDA

Ver la Versión Completa : ayuda con los dbgrids


amix
15-10-2007, 03:10:03
hola
tengo un problemita :confused: , tengo 2 pantallas una es de pura consulta y contiene un dbgrid y la otra es de busqueda y da los resultados en otro dbgrid, lo q me han pedido es que cuando haga la busqueda en los resultados si le doy dbclick a cualquiera de ellos por ejemplo a la columna uno q tiene como clave el 3 entonces me mande a la pantalla de consulta y me seleccione la clave 3 del dbgrid y la vrdd no tengo idea de como hacerle si alguien me puede ayudar de antemano graxias :)

enecumene
15-10-2007, 03:16:33
Hola Amix, mira no entendi muy bien lo quieres, a ver, lo que quieres es que luego de una busqueda y al hacer doble click un resultado especifico te presente los detalles en un form? si es asi solo debes usar el mismo dataset arrastrar los edits al otro form y en el evento OnDblClick del dbgrid pones:

Form1:=TForm1.Create(self);
Form1.Show;

Tan simple como eso, ahora si no entendi bien lo que quieres avisame.

Saludos.

enecumene
15-10-2007, 03:23:06
Hombre, no me habia dado cuenta de que se trataba de dos dbgrids en diferentes forms, los grids tienen la misma tabla o diferentes tablas con una clave en comun? deberias dar mas detalles para poderte ayudar.

Saludos.

NeoTrooper
15-10-2007, 09:57:12
Supongo que tendrias que pasar resultado recogido de busqueda y pasarlo por parametros al de la consulta. Quiza algo asi:


public
clave:integer;
....
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
clave:=DataSet1.FieldByName('clave').AsInteger;
end;


Y asi que el dbgrid de consulta se posiciona donde se encuentra esta clave.

Lepe
15-10-2007, 11:38:48
Lo mejor para ello es usar propiedades:


// Form para ver un solo registro:

TFormConsulta = class (TForm)

private
FClave:integer;
procedure SetClave(const Value:integer);

public
property Clave:integer read FClave write SetClave;
end;

implementation

procedure TFormConsulta.SetClave(const Value:integer);
begin
if Value <> FClave then
begin
if not dataset.Active then
dataset.Open;
FClave := Value;
if not dataset.Locate('NombreCampo', Value, []) then
ShowMessage('no encuentro el registro con el valor ' + inttostr(Value))
else
ShowMessage('ok, estoy situado en el registro');
end;
end;

procedure TFormConsulta.Button1Click
// boton para realizar la búsqueda y mostrar los resultados:
begin
With TFormBusqueda.Create(nil) do
begin
if ShowModal = mrOk then
Clave := Resultado;
Free;
end;

El Form de búsqueda se muestra como modal, tendrá una variable llamada Resultado de tipo integer:

// en el Form de búsqueda, puedes hacer algo así en el evento doble clic del grid:
Resultado := Formbusqueda.DAtasetPrincipal.FieldByname('clave').asinteger;
self.ModalResult := mrOk;



El funcionamiento:

En la ventana de consulta pulsas el button1, se abre la ventana de busqueda y espera a que el usuario dé doble clic sobre una fila (siempre se devuelve la clave primaria, ya que a partir de ahí podremos tomar cualquier campo de ese registro), la ventana se cierra y la ventana de consulta estará situado en ese registro.

Espero sea lo que necesites.

Saludos

amix
17-10-2007, 03:30:05
Muchas graxias por ayudarme chicos me fue de gran ayuda ;) y ojala y me siguan apoyando