PDA

Ver la Versión Completa : Entrada de datos en dbgrid


beastmo
23-01-2019, 00:37:41
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:

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:

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