Foros Club Delphi

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

Newbie 23-09-2003 22:25:43

Desplazamiento por un DBGrid
 
Qué tal, cómo les va!!!

Antes que nada, espero estar en el foro correcto, ya que no supe en donde más poner esta pregunta, pues no es ni de sql ni está relacionada 100% con conexión a datos.

Pues bien, de lo que se trata es de lo siguiente:

1.- En primera, cómo hacer para que, estando en un DBGrid y presionar la tecla "enter" en determinado campo, tome enseguida el valor que acaba de introducir el usuario para ejecutar cierto código. Me explico mejor: Por ejemplo, si estamos en el primer campo del dbgrid, en donde el usuario tiene que introducir el código del producto y oprimir enter(vk_return) para que el sistema busque los datos correspondientes a ese producto(como el precio y la existencia actual) y los introduzca en los demás campos de la tabla a la que está asociado el dbgrid. Lo que pasa actualmente es que si el usuario oprime enter, me toma el valor anterior del campo, es decir, si estamos introduciendo un producto nuevo, me toma 0(cero) y si estamos editando un campo, digamos para cambiar de producto, me toma el valor del producto anterior; y no es hasta el segundo enter que se toma el valor actual. Esto lo solucioné incrementando y disminuyendo el valor de dbgrid.selectedindex al presionar enter, con lo que funciona perfectamente, pero me gustaría saber si conocen otra forma de lograr esto sin tener que incrementar y disminuir ese valor.

2.- En el mismo caso del dbgrid, quisiera saber cómo se puede hacer para que, si estamos en la última celda de la última columna del grid y el usuario persiona enter, automáticamente se añada otra fila para que el usuario pueda introducir otro producto. Además, si está en la última celda, pero no en el último registro, se pase al siguiente registro de la tabla. El problema actualmente es que no sé como saber si nos encontramos posicionados en el último registro de la tabla. Resumiendo el asunto, lo que quiero es que, al presionar enter y estar en la última fila de la tabla, simplemente se añada otro registro.

Espero que alguien pueda echarme una mano con esto

hasta pronto :D

marcoszorrilla 24-09-2003 23:07:57

Mira este ejemplo:
GrLineeas es el nombre que se le ha dado a la rejilla.

Código:

ocedure TfrFacturas.GrLineasKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

if Key = vk_Return then
  begin
    if GrLineas.SelectedIndex < Pred( GrLineas.FieldCount -1 ) then
        begin
        GrLineas.SelectedIndex := GrLineas.SelectedIndex + 1;
        end
        else
        begin
        GrLineas.SelectedIndex := 0;
        //Flecha abajo es decir nuevo registro.
        GrLineas.Perform( wm_KeyDown, vk_Down, 0 );
        end;
    end;
end;

La primera pregunta no la veo, clara pero sino interpreto mal, no tiene nada que ver con la rejilla sino con el evento OnChange u OnValidate del Campo.


Un Saludo.

__cadetill 25-09-2003 02:15:43

en la 1era pregunta, supongo que los demás campos serán calculados, no?

si es así, intenta que tus clientes se acostumbren al comportamiento estándar de Windows (tendrás menos dolores de cabeza) ya que, la tecla TAB hace lo que quieres para la 1era y 2unda pregunta

Si no fueran calculados, puedes informar el evento OnValidate del TField correspondiente (o sea, del campo)

Espero te sirva


La franja horaria es GMT +2. Ahora son las 00:07:00.

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