Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Seleccionar Fila Dbgrid por programa (https://www.clubdelphi.com/foros/showthread.php?t=89110)

shoulder 28-09-2015 18:42:55

Seleccionar Fila Dbgrid por programa
 
Como puedo seleccionar una fila del dbgrid por programa. Es decir : en el form hago un insert que luego se carga en el dbgrid, el usuario despues hace un click sobre la linea y se ejecutan distintas sentencias dentro del oncellclick del dbgrid.
Queria evitar que el usuario haga ese click y automaticamente al grabar el sistema cargue en el dbgrid y haga un click sobre la linea.

Se puede hacer un focus con un where en el dbgrid, para ir directamente a la linea?.
Gracias.

ecfisa 28-09-2015 19:14:03

Hola shoulder.
Cita:

Como puedo seleccionar una fila del dbgrid por programa. Es decir : en el form hago un insert que luego se carga en el dbgrid, el usuario despues hace un click sobre la linea y se ejecutan distintas sentencias dentro del oncellclick del dbgrid.
Queria evitar que el usuario haga ese click y automaticamente al grabar el sistema cargue en el dbgrid y haga un click sobre la linea.
Sinceramente no entiendo la situación ni la consulta.

Cita:

Se puede hacer un focus con un where en el dbgrid, para ir directamente a la linea?.
Si el TDBGrid tiene asignado el mismo TDataSource que los controles data-aware con los que estas ingresando, el posicionamiento y los cambios se ven reflejados inmediatamente en el DBGrid.

Sería bueno si describes el entorno en que se desarrolla la acción con mas detalles.

Saludos :)

shoulder 28-09-2015 19:27:31

dbgrid
 
Hola Ecfisa, un usuario solicita un turno, completa fechas, oprime un boton se genera un pdf y lo ve reflejado en un dbgrid la informacion grabada.

Por otro lado al ver en el dbgrid la informacion solicitada hace un click sobre el renglon del dbgrid de su turno solicitado y hay diversas sentencias que se ejecutan dentro del oncellclick.
(lo habilita a firmar digitalmente ese pdf).

Queria hacerlo mas automatico que despues del insert y el refresh en el dbgrid, por programa hacer un click sobre la linea correspondiente.

Para mas claro puede ser que ese usuario tenga varios turnos pedidos a lo largo del tiempo, por eso tendria varios rows, tendria que buscar internamente cual es el renglon grabado donde corresponde el click.
Gracias.

Gracias.

ecfisa 28-09-2015 21:12:29

Hola shoulder.

A ver si esto es lo que estas buscando...
Código Delphi [-]
...
type
  TForm1 = class(TForm)
  ...
  private
    procedure DataSetAfterPost(DataSet: TDataSet);
  public
  end;

...

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  DBGrid1.DataSource.DataSet.AfterPost := DataSetAfterPost;
end;

type
  TDBGridEx = class(TDBGrid);

procedure GotoCurrentRow(Grid: TDBGrid);
var
  ti: array [0..1] of TInput;
  p : TPoint;
  R : TRect;
  cr: Integer;
begin
  cr := TDBGridEx(Grid).Row;
  R  := TDBGridEx(Grid).CellRect(0, cr);
  p  := Form1.ClientToScreen(Point(Grid.Left+IndicatorWidth+10, R.Top+10));
  Mouse.CursorPos := p;
  ZeroMemory(@ti, SizeOf(ti));
  ti[0].mi.dwFlags := MOUSEEVENTF_LEFTDOWN;
  ti[0].Itype      := INPUT_MOUSE;
  ti[1].mi.dwFlags := MOUSEEVENTF_LEFTUP;
  ti[1].Itype      := INPUT_MOUSE;
  SendInput(2, ti[0], SizeOf(TInput));
end;

// Despues de guardar, ir a la fila
procedure TForm1.DataSetAfterPost(DataSet: TDataSet);
begin
  GotoCurrentRow(DBGrid1);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  DBGrid1.DataSource.DataSet.AfterPost := nil;
end;

Saludos :)

Neftali [Germán.Estévez] 29-09-2015 14:20:45

Yo creo que estás dando más vueltas de la cuenta.
Si quieres ejecutar un código en el clik lo colocas ahí (1) o generas un procedimiento y lo llamas desde ahí (2).

Si quieres ejecutar ese código desde otro sitio, lo lógico es que optes por la opción (2) y lo llames desde donde toca, pero lanzar un click del grid para ejecutar ese código es innecesario y lioso. El paso por el OnClick es innecesario.

No se si me explico.

shoulder 29-09-2015 17:26:01

dbgrid
 
Gracias era lo que necesitaba funciona perfecto, reemplaze el onclick del dbgrid y cuando hago el GotoCurrentRow despues voy a un procedimiento, con lo que me pasaron ustedes. Genial!!!.


La franja horaria es GMT +2. Ahora son las 23:45:16.

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