Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   DBGrid (https://www.clubdelphi.com/foros/showthread.php?t=2010)

kao 05-07-2003 08:10:47

DBGrid
 
Hola, disculpen podria alguien ayudarme, necesito saber como hacer doble click en la celda de un dbgrid, y al hacerlo que los datos relacionados con los de esa celda, se pasen a unos edits, pueden audarme??
gracias.

andres1569 05-07-2003 09:17:53

El DBGrid dispone, como la amyoría de controles, de un evento OnDblClick. Supongo que ya lo tendrías en cuenta.

Luego se trata de interceptarlo, y ahí metes el código que quieras, por ejemplo

Código:

with DBGrid.DataSource.DataSet do
begin
  Edit1.Text := FieldByName('ID_CASA').AsString;
  Edit2.Text := FieldByName('Descripcion').AsString;
  ...
end;


kao 05-07-2003 09:20:32

gracias lo intentare a ver ke pasa :D

kao 05-07-2003 09:38:12

Hola, tengo dos inconvenientes, los edits a los que quiero pasar los datos estan en una forma diferente a la que tiene el grid (estan en la forma mediante la cual se llama al a forma del grid), y el otro es que necesito usar ese cuadro de busqueda en varias ocasiones, no solo ahi.
Gracias :confused:

andres1569 05-07-2003 09:51:22

Hola Kao:

Quizás sea esto lo que quieres: que al hacer doble click sobre el Grid, te capture esos datos y a la vez que cierre el Form sobre el que está el Grid.

Si es así, no debes tener muchos problemas, siempre y cuando ese Grid apunte a un DataSet que no esté en dicho Form; dicho de otra forma, lo recomendable es que tengas el DataSet en un DataModule al que tienen acceso los dos Forms que tú comentas. Cuando el usuario hace doble click sobre ese Grid, cierras el Form (bueno, esto tienes que aclararnos si quieres que sea así, estoy suponiendo demasiado), y en el DataSet se queda activo el registro que el usuario "cliqueó", de forma que lo puedes acceder aunque hayas cerrado/destruido ese form.

Espero haberme explicado correctamente, ya me dirás.

kao 05-07-2003 09:55:44

Si exactamente lo que quiero es eso, al darle doble click se cierre el form y los datos queden en edits, pero eso es justamente lo que no se hacer, mi dataset (que por cierto es un query), ya se encuentra en un datamodule, pero no se como hacer que se conserven los valores despues de cerrar el form, yo pense que no se podia, me podrias hechar una mano con eso??:)

kao 05-07-2003 09:59:15

Me di cuenta que todavia puedo ser mas especifico:p

estoy usando un query en el evento Onchange de un edit, para que al ir metiendo letras (un nombre), me muestre resultados parecidos en el grid (un sql que usa LIKE), y el asunto es al hacer doble click en uno o en el resultado.
gracias

andres1569 05-07-2003 10:19:27

Hola Kao, parece que estemos en un Chat, los dos Online aquí.

Si como dices, ese Query lo tienes en un DataModule aparte, llamémosle DATAMOD2, antes que nada el Form desde el que llamas al otro debe tener en su cláusula Uses la unit del DATAMOD2, para acceder a sus objetos. Supongamos que esta es la rutina donde llamas al Form de búsqueda:
Código:

var
  AForm: TFormBusqueda;
begin
  AForm := TFormBusqueda.Create(Self);
  try
    if AForm.ShowModal = mrOk then // el usuario hizo Doble click y validó
    begin
      Edit1.Text := DATAMOD2.Query1.FieldByName('ID_CASA').AsString;
      Edit1.Text := DATAMOD2.Query1.FieldByName('Descripcion').AsString;
    end     
    else begin  // el usuario canceló la búsqueda
      Edit1.Text := '';  // por ejemplo podemos vaciar los Edits
      Edit1.Text := '';
    end
  finally
    AForm.Free;  // liberamos la memoria del Form de búsqueda   
  end;
end;

Bueno, esta es una forma de hacerlo, el Form de búsqueda al abrirse lanza la consulta y el form que lo llama toma de ella los valores que le interesen si se aceptó la búsqueda. Fíjate que TFormBusqueda debe cerrar la consulta en su método OnDestroy (si es que quieres que se cierre realmente); aun así podemos mirar los valores de la consulta antes de hacer AForm.Free, que es cuando se cerrará realmente.

En TFormBusqueda iría esto:
Código:

procedure TFormBusqueda.Create (Sender: TObject);
begin
  DATAMOD.Query1.Open;
end;

procedure TFormBusqueda.Destroy (Sender: TObject);
begin
  DATAMOD.Query1.Close;
end;

Uff !!! Acabo de ver tu nuevo mensaje, lo del uso del Like que me acabas de decir no influye en lo que estamos tratando.

Por cierto, si entras en la página web de Cadetill, puedes descargarte un componente, llamado algo así como TDBSearchDialog, que sirve para hacer búsquedas, igual te ayuda mirar su código, o el componente entero.

kao 05-07-2003 22:52:57

Hola, me ha surgido un nuevo problema, la pantala de busqueda a la que me referia debe ser usada desde muchas forms no solo una, que puedo hacer??? :confused:


La franja horaria es GMT +2. Ahora son las 18:21:34.

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