Foros Club Delphi

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

ronalg 09-01-2006 19:08:05

Problemas DBGrid
 
Resulta que tengo un programa donde hay una grilla de Items de un pedido, de cada fila solo se puede modificar las columnas de tarifa(precio venta) y porcentage de descuento, no uso el boton de los navegadores, sino botones normales, hay una relacion maestro detalle con la tabla clientes, el problema es al editar alguna linea de pedido, hago clic en mi boton editar que tiene el siguiente codigo:
Código Delphi [-]
procedure TW_TARIFARIOS.bbt_editar_tarClick(Sender: TObject);
begin
     ds_detail.DataSet.Edit;
     dbg_detail.SetFocus;
     dbg_detail.SelectedIndex:=8;
     .
     .
     .
     /*mediante un procedure activo y desactivo los botones involucrados*/
     /*aqui esta parte del codigo*/
     bbt_aceptar_tar.Enabled:=true;
     bbt_cancelar_tar.Enabled:=true;
     bbt_editar_tar.Enabled:=false;
     .
     .
     .
end;

El problema es que si hago click en otro registro de la grilla o preciono la flecha hacia abajo o arriba, automáticamente la grilla hace un post pero nunca se llama a este codigo

Código Delphi [-]
procedure TW_TARIFARIOS.bbt_aceptar_tarClick(Sender: TObject);
begin
//
     ds_detail.DataSet.Post;
     .
     .
     .
     /*mediante un procedure activo y desactivo los botones involucrados*/
     /*aqui esta parte del codigo*/
     bbt_aceptar_tar.Enabled:=false;
     bbt_cancelar_tar.Enabled:=false;
     bbt_editar_tar.Enabled:=true;
     .
     .
     .
end;

procedure TW_TARIFARIOS.bbt_cancelar_tarClick(Sender: TObject);
begin
//
     ds_detail.DataSet.Cancel;
     .
     .
     .
     bbt_aceptar_tar.Enabled:=false;
     bbt_cancelar_tar.Enabled:=false;
     bbt_editar_tar.Enabled:=true;
     .
     .
     .
end;

Pregunta:

¿Como puedo hacer que la grilla no se mueva del registro actual si este esta en modo de edicion o inserción?

Gracias por su ayuda.

roman 09-01-2006 20:37:01

Cita:

Empezado por ronalg
¿Como puedo hacer que la grilla no se mueva del registro actual si este esta en modo de edicion o inserción?

Quizá podrías valerte del evento BeforeScroll del DataSet aunque no estoy muy seguro de que puedes evitar el desplazamiento.

Por otra parte quizá te convenga más valerte de los eventos AfterInsert, AfterEdit y AfterPost para actualizar los botones.

O, mejor aún, utilizar un ActionList. En él programas las acciones correspondientes a cosas como Edición y Guardado y asignas estas acciones a los botones correspondientes (ya no codificas directamente en el OnClick de los botones). En el evento OnUpdate del ActionList examinas la propiedad State del DataSet y habilitas o inhabilitas los botones según el caso.

// Saludos

ronalg 10-01-2006 01:01:31

Exactamente lo que hice
 
gracias por la respuesta, fue exactamente lo que hice, pero ahora si me las veo negras, si estoy al final de la grilla y al ususario se le ocurre apretar flecha de cursos hacia abajo, se inserta automáticamente un nuevo registro y no quiero que eso suceda, porque los items de la venta son insertados automáticamente y son finitos (siempre 10) no puede haber mas.

Si supieras como evitar esto agradecería que me dieras una mano.

gracias

roman 10-01-2006 01:11:39

Podrías usar el evento BeforeInsert:

Código Delphi [-]
procedure TForm1.Table1BeforeInsert(DataSet: TDataSet);
begin
  if DataSet.RecordCount >= 10 then
    abort;
end;

// Saludos

ronalg 10-01-2006 03:29:04

gracias lo probe y....
 
Me da un ligero parpadeo pero lo solucien con disablecontrols y enablecontrols
gracias


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

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