PDA

Ver la Versión Completa : DBGrid


kao
05-07-2003, 08:10:47
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

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:

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:
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 (http://www.clubdelphi.com/users/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: