PDA

Ver la Versión Completa : Pasar de una Fila a Otra en Un DBGrid al Pulsar Enter


hondaalberto
02-07-2012, 14:51:08
Buenos dias amigos

Tengo un DBGRID que utilizo para cargar insertar los Productos de Una factura de Ventas y necesito que luego de insertar una Nueva linea al pusar enter pase a la Siguiente Fila.

Al igual que si estoy navegando los Registros al pulsar enter vaya pasando de una colmna a otra en la misma fila y al llegar a la ultima Columna pasa a la siguiente Fila.

Tengo las Siguientes Columnas:
0: Fecha
1: Producto No.
2: Descripción
3: Cantidad
4: Precio
5: Descuento
6: Iva

Muchas Gracias por anticipado por la ayuda que puedan brindarme y por su valioso tiempo invertido.

hondaalberto
02-07-2012, 15:49:37
Navegando por la Web me he encontrado el Siguiente procedimiento el cual me funciona para cuando preciono enter el foco va pasando de un columna a otra hasta llegar al final de la línea.

Pero aún me falta que al llegar a la última columna pase a la próxima filla con el foco en la primera columna no que vuelva a la primera columna de la misma fila en la que estoy actualmente navegando.

Aqui les dejo el procedimiento:

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
{ Manejador del evento OnKeyPress del Form }
{ También hay que establecer la propiedad KeyPreview del Form a True }
begin
if Key = #13 then { si es la tecla <enter> }
if not (ActiveControl is TDBGrid) then { si no es un TDBGrid }
begin
Key := #0; { nos comemos la tecla }
Perform(WM_NEXTDLGCTL, 0, 0); { vamos al siguiente control }
end
else
if (ActiveControl is TDBGrid) then { si es un TDBGrid }
with TDBGrid(ActiveControl) do
if selectedindex < (fieldcount -1) then
selectedindex := selectedindex +1
else
selectedindex := 0;
end;

Fuente de los Datos: http://www.terra.es/personal/alksoft/delphi/trucos/trucos.htm

Casimiro Notevi
02-07-2012, 16:46:33
Sí, en principio ese código te viene bien para lo que quieres hacer.

hondaalberto
02-07-2012, 17:09:45
Gracias por tu respuesta Casimiro
Este codigo me funciona bien para moverme de una columna a otra cuando preciono enter, pero me falta por hacer que al llegar a la última columna pase a la siguiente fila como cuando presionamos cursor Down que baja a la siguiente línea.

Saludos y gracias por anticipado

Casimiro Notevi
02-07-2012, 19:58:52
Bueno, básicamente tienes que controlar que estás en el último campo y entonces bajar al siguiente registro y posicionarte en el primer campo.
Tendrás que controlar que exista el registro siguiente para crear uno nuevo o simplemente editar el que existe.
Esto de hacer una BUENA edición en un dbgrid es realmente muy complejo si se quiere hacer bien, surjen multitud de imprevistos, ya lo verás, lo sufrirás bastante.

Me parece recordar que el compañero José Luis Garcí puso un código para controlar este tipo de cosas, que lo mismo te puede servir, adaptándolo.

ecfisa
02-07-2012, 19:59:40
Gracias por tu respuesta Casimiro
Este codigo me funciona bien para moverme de una columna a otra cuando preciono enter, pero me falta por hacer que al llegar a la última columna pase a la siguiente fila como cuando presionamos cursor Down que baja a la siguiente línea.

Saludos y gracias por anticipado

Hola.

Proba de esta forma:

procedure TForm1.DBGridKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
with TDBGrid(Sender) do
if SelectedIndex < FieldCount-1 then
SelectedIndex:= SelectedIndex + 1
else
begin
DataSource.DataSet.Next;
SelectedIndex:= 0;
end;
end;


Saludos.