Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Entrada de datos en dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=93703)

beastmo 23-01-2019 00:37:41

Entrada de datos en dbgrid
 
Buenas gente! estoy renegando con un dbgrid. Debe ser una pavada pero estoy trabado.
La situacion es la siguiente: estoy permitiendo que el usuario ingrese datos directamente por el dbgrid. El campo que da problemas es un entero, pero aplica igual para un real. Cuando esta en modo insert o edit solamente puedo tipear numeros, lo cual funciona bien pero con click derecho despliega un menu contextual que deja pegar texto. Usualmente, en los dbEdit, en el evento OnContextPopup ponia la variable Handled a True para evitar el menu y lo solucionaba pero el dbgrid no tiene dicho evento. Ya bloquie el control + v.
Alguna idea como evitar el menu contextual en el dbgrid? o alguna forma de usar el evento before post o onvalidate para evitar el error "xxxxx ejemplo" no es un entero o real valido.
Intente esto pero no funciona:
Código:


if not  TryStrToInt(fdqry.FieldByName('CampoEntero').AsString, VariableInt) then
          raise Exception.Create('Error');
if not  TryStrToInt(fdqry.FieldByName('CampoEntero').Value, VariableInt) then
          raise Exception.Create('Error');

Quiero evitar que se ingrese texto pegando. Desde ya gracias, saludos!

ecfisa 23-01-2019 18:31:14

Hola.


Podes usar el evento OnSetText del TField en cuestión para evaluar el ingreso y actuar en consecuencia:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  DataSet.FieldByName('EL_CAMPO').OnSetText := DataSetFieldSetText;
end;

procedure TForm1.DataSetFieldSetText(Sender: TField; const Text: string);
var
  v: Integer;
begin
  if not TryStrToInt(Sender.AsString, v) then
  begin
    // Aquí lo que quieras hacer
    ShowMessage('Entrada inválida');
  end;
end;

Saludos :)

beastmo 28-01-2019 23:52:46

Muchas gracias por la respuesta, me sirvio! Lo pude solucionar, te debo una. Saludos


La franja horaria es GMT +2. Ahora son las 21:17:40.

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