Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Pasar enfoque de Celdas en dbGrid (https://www.clubdelphi.com/foros/showthread.php?t=14254)

AGAG4 14-09-2004 19:42:28

Pasar enfoque de Celdas en dbGrid
 
Uso FireBird 1.50, IBX 7.08

Como puedo darle un ENFOQUE entre campos de una Tabla ó ya sea en un dbGrid, lo que pasa es que cuando estoy en el dbGrid y tengo 6 campos y en el campo 3 presionó la tecla "Fecha Abajo", me inserta un registro Nuevo en la Tabla al insertar uno Nuevo quiero pasarle el enfoque al instante al primer campo. Les agradezco cualquier comentario.

roman 14-09-2004 19:57:11

En el evento AfterInsert del DataSet asociado al DBGrid puedes poner

DBGrid1.SelectedIndex := 0;

// Saludos

AGAG4 14-09-2004 20:34:40

oki
 
Como me dice usted, no me funciona porque, tengo los dataset's en un datamodule y si mando llamar el SelectedIndex del dbGrid desde el datamodule dentro del evento AfterInsert me marca el error "Access Violation at adress....",
ó bien.

Como podria filtrar un Registro, que al momento de presionar la "flecha abajo" antes de Insertarme un Nuevo registro poder validar ciertos campos, si los campos son Correctos, entonces que Abra un Nuevo Registro, Si No son validos entonces que no Abra el Registro Nuevo?????

roman 14-09-2004 20:42:10

Simplemente verifica en el AfterInsert que ya esté creado el DBGrid:

if DBGrid1 <> nil then

Por otra parte ya estás mezclando cosas. Para validar si se puede o no insertar un registro usa entonces el evento BeforeInsert.

// Saludos

jachguate 14-09-2004 20:42:32

Hay dos posibles soluciones:

En el evento AfterInsert del dataset, en el módulo de datos:

Código Delphi [-]
  Tabla.Fields[0].FocusControl;

Tambén, en el evento OnStateChange del DataSource, que debiera estar en el formulario:

Código Delphi [-]
  if ModuloDatos.Tabla.State = dsInsert Then
    dbGrid1.SelectedIndex := 0;

Hasta luego.

;)

AGAG4 14-09-2004 21:05:11

????
 
No me funcionan como lo exponen mandando llamar al dbGrid desde el Datamodule que es donde tengo los dataset's, aunque le ponga dbGrig<>Nil.
No hay un Evento parecido al OnValidate de cada campo del Dataser, pero yo lo ocupo por cada Registro, para Validar antes de Insertar un Nuevo registro, ya se que existe el evento BeforeInsert y AfterInsert, pero no viene como parámetro alguna variable booleana como el "Accept", para evitar que Inserte un Registro Sin antes haber validado el Anterior. Gracias por sus Respuestas.

roman 14-09-2004 21:11:18

Si las condiciones no se cumplen en BeforeInsert basta que llames a abort para cancelar la inserción.

// Saludos

AGAG4 14-09-2004 21:58:27

oki
 
Muchas Gracias Sr. Roman, ya me funcionó, le debo otra más.

jachguate 14-09-2004 22:53:25

Cita:

Empezado por AGAG4
pero no viene como parámetro alguna variable booleana como el "Accept", para evitar que Inserte un Registro Sin antes haber validado el Anterior.

Esto no es necesario. Para hacer validaciones a nivel de registro, podes valerte del evento BeforePost, además de los OnValidate en cada campo. Si alguno de estos falla, el before insert nunca se ejecutará, puesto que nunca llega a intentar insertar un nuevo registro.

Saludos.

;)

AGAG4 15-09-2004 02:00:30

oki
 
Tiene muchísima razón Sr. Juan Antonio Castillo Hernández, ya hice pruebas y lo tuve que poner en el BeforePost para validar el Registro. De todas formas Gracias por su Respuesta. Le debo otra comida :)


La franja horaria es GMT +2. Ahora son las 11:55:59.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi