Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Pasar de una Fila a Otra en Un DBGrid al Pulsar Enter (https://www.clubdelphi.com/foros/showthread.php?t=79402)

hondaalberto 02-07-2012 14:51:08

Pasar de una Fila a Otra en Un DBGrid al Pulsar Enter
 
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:

Código Delphi [-]
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  } 
    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...cos/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

Cita:

Empezado por hondaalberto (Mensaje 436524)
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:
Código Delphi [-]
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.


La franja horaria es GMT +2. Ahora son las 15:30:35.

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