PDA

Ver la Versión Completa : Cambio de columnas en una grilla


josem
06-04-2005, 01:24:37
Hola integrantes.
Tengo un problema en apariencia simple pero no logro resolverlo.

Tengo una grilla asociada a una tabla de datos. en esta grilla estan representadas las reservas de habitaciones para un rango de fechas dado. Cada tipo de ocupacion es coloreado segun sea el caso. Todo funciona de maravillas.., pero tengo el siguiente problema:
Tengo un StaticText, en el cual muestro toda la informacion relacionada con el Cliente de determinada celdilla ( en cada celdilla solo existe un codigo que hace referencia a la tabla de reservaciones de clientes ). Hasta ahi todo va bien. el problema se produce cuando cambio de fila con el teclado o cambio de celdilla con el mouse. el puntero de la grilla sigue apuntando al dato anterior antes de cambiar el foco. Esto no ocurre si con las teclas de flechas me muevo hacia la derecha o isquierda. En este caso por cada movimiento se actualiza el puntero de la grilla y obiamnete mi StaticText.

Alguien puede darme luz, sobre el tema.

Agradecido de antemano.

Saludos
Jose Miguel B.

Pablo Carlos
06-04-2005, 01:44:00
Hola...

Tengo un StaticText, en el cual muestro toda la informacion relacionada con el Cliente de determinada celdilla ( en cada celdilla solo existe un codigo que hace referencia a la tabla de reservaciones de clientes ). Jose Miguel B.

probastes el evento afterCroll de la tabla, podrías cambiar la propiedad caption del StaticText en este evento... de esta manera se actualizará en cada cambio de registro que según creo es lo que buscas.
Saludos

jachguate
06-04-2005, 01:46:18
Si tuvieses la tabla/query en un módulo de datos, lo mas apropiado sería utilizar el evento OnUpdateData del datasource que sirve de puente entre el grid y el dataset, que está hecho para estos casos.

Hasta luego.

;)

josem
06-04-2005, 13:29:55
Hola:

Creo que no me explique vien y conduje a confucion.
El problema que tengo es que cuando me muevo por la grilla hacia la isquierda o derecha, el puntero de la misma se actualiza. Pero no ocurre esto si voy de arriba a abajo. Osea si me muevo entre columnas el puntero de la grilla se actualiza, pero no ocurre lo mismo si me muevo entre filas.

Alguna idea al respecto.

Saludos
Jose Miguel B.

jachguate
06-04-2005, 14:56:09
:confused:
Definitivamente sigo sin entender... :confused:

josem
07-04-2005, 01:37:36
Hola
Mira con este ejemplo tomado desde el "Help de delphi" te va a quedar mas claro el problema. Solo Modifique la asignacion del "DisplayLabel" para graficar mejor la situacion:

El ejemplo siguiente requiere de una Grilla, un DataSource y un Table.
con las siguientes asignaciones en la tabla:
Table1.DatabaseName := 'DBDEMOS';
Table1.TableName := 'biofile.db';

... Entonces cada vez que pinches una celdilla o te muevas con las teclas de flecha hacia la isquierda o derecha, en la cabecera de la columna de la celdilla pinchada aparecera un asterisco y los primeros 4 caracteres del campo 'Category'. No ocurrira lo mismo si te mueves con las teclas de flecha hacia arriba o hacia abajo. A pesar de que el campo 'Category' ya tiene otro contenido.

Espero haberme explicado mejor...

Saludos
Jose Miguel B.

var
Form1: TForm1;
StarIsThere: Boolean;
implementation

{$R *.dfm}
procedure TForm1.DBGrid1ColEnter(Sender: TObject);
begin
with DBGrid1.SelectedField do
DisplayLabel := '* ' + copy( Table1.FieldByName('Category').AsString,1,4)+ '* '+ DisplayLabel;
StarIsThere := True;

end;

procedure TForm1.DBGrid1ColExit(Sender: TObject);

var
TheLabel: string;
begin
if StarIsThere then
begin
with DBGrid1.SelectedField do
begin
TheLabel := DisplayLabel;
Delete(TheLabel, 1, 8);
DisplayLabel := TheLabel;
end;
end;
end;

roman
07-04-2005, 03:35:53
Pablo Carlos te lo dijo desde un principio: usa el evento AfterScroll del dataset. El evento OnColEnter sólo se activará cuando entres a la columna y no si te mueves sobre ella. Es decir, si te desplazas verticalmente, el evento no se genera porque no has entrado a una nueva columna. Sin embargo tal desplazamiento vertical sí genera un cambio de fila y por tanto el evento AfterScroll.

// Saludos

josem
07-04-2005, 18:46:41
Que facil era, ... gracias por su ayuda. Sirvio de maravilla el AfterScroll.

Dentro del procedimiento AfterScroll hice el llamado a onColEnter y funciono de maravillas.

Una vez mas gracias.

Saludos
Jose Miguel Bakulic V.