PDA

Ver la Versión Completa : Enter Como Tab En Dbgrid


ingmichel
24-11-2008, 22:57:49
Hola Foreros Como Estan, Necesito Hacer Que Cuando Pulse A La Tecla Enter En Mi Dbgrid Me Pase A La Proxima Celda, Lo Necesito Porque Estoy Haciendo Los Detalles De Una Factura En El Dbgrid Y Necesito Esa Caracteristica, Si Alguien Lo Ha Hecho Por Favor Le Agradeceria La Ayuda, Gracias De Antemano.

JosepGA
25-11-2008, 08:58:41
hola,

para ello debes activar en la tForm ( la ventana ) la propiedad KeyPreview a True. Luego en uno de los dos eventos de la ventana poner lo siguiente ( no recuerdo cual de los dos afectaba al comportamiento que tu quieres ):

en el evento Onkeypress:


If ( Key = #13 ) Then
Key := #9


en el evento OnKeyDown:


If ( ( Key = #13 ) Or ( Key = #9 ) ) Then
Begin
SelectNext( Sender As tWinControl, True, True );
Key := #0;
End;


Prueba cada uno, ya que es uno de ellos el que te irá bien

Un saludo

ingmichel
25-11-2008, 22:10:49
hola,

para ello debes activar en la tForm ( la ventana ) la propiedad KeyPreview a True. Luego en uno de los dos eventos de la ventana poner lo siguiente ( no recuerdo cual de los dos afectaba al comportamiento que tu quieres ):

en el evento Onkeypress:


Código Delphi [-] (http://www.clubdelphi.com/foros/#)
If ( Key = #13 ) Then
Key := #9





en el evento OnKeyDown:


Código Delphi [-] (http://www.clubdelphi.com/foros/#)
If ( ( Key = #13 ) Or ( Key = #9 ) ) Then
Begin
SelectNext( Sender As tWinControl, True, True );
Key := #0;
End;





Prueba cada uno, ya que es uno de ellos el que te irá bien

Un saludo


hola jose, gracias por responderme, probe los dos ejemplos y ninguno me funciono, ahh y otra cosa como hago para mandar el codigo de factura a la tabla detalle factura ya que lo necesito enviar tantas veces como articulos haya en la factura, bueno espero tu respuesta, gracias nuevamente.

JosepGA
26-11-2008, 10:59:41
hola,

es raro que no te funcione, a mi me funcionaba sin problemas, lo que pasa es que ahora uso los componentes de Infopower, lleva un DBGrid que tiene la propiedad de EnterAsTab.

Sobre el tema del detalle de facturas, explicate un poco más para que entienda que es lo que estas haciendo.

Un saludo

ingmichel
27-11-2008, 20:37:21
hola,

es raro que no te funcione, a mi me funcionaba sin problemas, lo que pasa es que ahora uso los componentes de Infopower, lleva un DBGrid que tiene la propiedad de EnterAsTab.

Sobre el tema del detalle de facturas, explicate un poco más para que entienda que es lo que estas haciendo.

Un saludo

hola de nuevo jose ya consegui lo del tab con enter, en cuanto a la factura que estoy intentando hacer lo k pasa es k tengo una tabla factura_enca donde tengo los siguientes campos:

COD_FACTURA INT,
COD_CLIENTE INT,
CONDICION PAGO VARCHAR,
PTJE_DESC FLOAT,
TOTAL_FACTURA FLOAT,

Y TENGO OTRA TABLA FACTURA_DETALLE CON LOS SIGUIENTES CAMPOS:

COD_FACTURAD INT
COD_ARTCULO VARCHAR,
CANTIDAD FLOAT,
PRECIO FLOAT,
IMPORTE FLOAT,

AHORA BIEN LO K NECESITO HACER ES QUE CUANDO ESTE CAPTURANDO SUPONGAMOS LA FACTURA 1 EN LA TABLA FACTURA_ENCA NECESITO QUE TAMBIEN SE CAPTURE LA FACTURA 1 EN LA TABLA FACTURA_DETALLE PARA PODER LUEGO HACER EL INNER JOIN QUE ME DEVUELVA LOS REGISTROS DE LA FACTURA PERO EN REALIDAD NO SE COMO HACERLO, CUAL ES TU SUGERENCIA?

JosepGA
02-12-2008, 11:30:18
hola,

si es para edición de un maestro-detalle, primero me deberias decir con que base de datos trabajas, es decir, ¿ es Firebird ? Si es así, mirate el tema del DataSetProvider y los tipos de campos tDataSetField, que no es otra cosa, que la tabla detalle. Como montarlo, pues dos tSQLQuery, uno para el maestro y otro para el detalle, relacionados los dos por un tDataSource, el tSQLQuery de la cabecera de la factura conectado a un tDatasetProvider, luego dos tClientDataSet conectando el de cabecera al tDatasetProvider, y el tClientDataSet del detalle se conectará al tClientDataSet de la cabecera mediante un campo del tClientDataSet de la cabecera ( del tipo tDataSetField ). Para que lo veas claro, te pongo un ejemplo según tus tablas:

tSQLQueryCab.SQL( 'SELECT * FROM factura_enca ORDER BY COD_FACTURA' );

tDataSourceCab.DataSet := tSQLQueryCab;

tSQLQueryDet.SQL( 'SELECT * FROM FACTURA_DETALLE where ( COD_FACTURAD = :COD_FACTURA ) ORDER BY COD_ARTCULO' );

donde :COD_FACTURA significa que es un parametro que recibe del componente tSQLQueryCab al estar relacionado tSQLQueryDet mediante la propiedad DataSource, es decir tSQLQueryDet.DataSource := tDataSourceCab;

Luego tDataSetProviderCab.DataSet := tSQLQueryCab;

Luego tClientDSCab.ProviderName := tDataSetProviderCab;

Activas tClientDSCab con tClientDSCab.Active := TRUE;

Añades los campos de la tabla al componente tClientDSCab ( botón derecho Fields Editor, luego botón derecho Add All Fields ). Fijate que el ultimo campo es del tipo tDataSetField, cojes el nombre de este campo y seleccionas el componente tClientDSDet y se lo asignas a la propiedad DataSetField. Ahora desactiva la tabla tClientDSCab y vuelvela a activar, verás que se activan tanto la tabla cabecera como detalle.

Espero te sirva, en el foro hay muchos hilos al respecto, pero qte queria introducir un poco, si desconocias esto.

Un saludo

ingmichel
02-12-2008, 20:33:02
ok jose muchisimas gracias por el ejemplo, se me olvido mencionarte que estoy utilizando sql server 2000 como base de datos, de todas maneras tratare de adaptar el ejemplo k me haz dado, gracias por todo hermano...:)

JosepGA
03-12-2008, 10:40:33
de nada, te aconsejo te bajes la cara oculta de delphi 6. Aqui verás mas ejemplos sobre el tema.

Un saludo

Casimiro Notevi
03-12-2008, 13:35:42
de nada, te aconsejo te bajes la cara oculta de delphi 6. Aqui verás mas ejemplos sobre el tema.

Un saludo


jeje... será "La cara oculta de Delphi 4" que es libre, la 6 tendrá que comprarla.
http://www.terawiki.clubdelphi.com/archivos/Delphi-Win32/Libros/LaCaraOcultaDeDelphi4.pdf.zip

JosepGA
03-12-2008, 14:03:42
es verdadm no recordaba cual era la gratuita.

ingmichel
08-12-2008, 20:24:30
hola como estan, ya he logrado mi objetivo de hacer lo de la factura_detalle k comentaba mas arriba, la solucion fue en caso de k alguien le suceda lo mismo fue usar un componente llamado kbmMemTable no c si alguien lo conoce, bueno el caso es k este componente funciona como una tabla virtual en el cual tu mismo le escribes los campos y el tipo, y su funcion es como la de un tquery normar la diferencia es k trabaja desconectado de la bd, entonces el codigo que use para capturar en mi tabla factura_detalle fue el siguiente:

while not kmemtable1.eof do
begin
qfdetalle.close;
qf.detalle.sql.clear;
qfdetalle.sql.add('insert into factura_detalle');
qfdetalle.sql.add('values(' + quotedsrt(edit1.text) ......);
qfdetalle.executesql;
end;

de manera que guardara en la factura_detalle tantos valores como haya en el grid....